no image
[Database] DB 설계시 필수 덕목 (이상현상 -> 정규화)
DB 설계시 가장 중요한 대 원칙은 다음과 같다DB 설계의 핵심은 중복(Duplicated) 을 없애는 것이다위와 같이 게시글 데이터가 DB에 있다고 가정하자.이때, 박재성 이란 사람이 박지성으로 개명하게 되어 모든 테이블의 데이터를 변경해야하는 상황이 발생했다.우리는 이럴때 그러면 ctrl+F 로 모든 데이터를 찾아 일일히 수정해줘야한다.열심히 데이터를 수정하다가, 실수로 뒷쪽 순번의 데이터 수정을 누락하게 되어 박재성으로 남겨둔다면 어떻게 될까?시간이 많이 지난후, 만약 132번 게시글에 대한 신고가 접수되어 작성자를 찾으려고 검색해도 박재성이란 사람은 검색되지 않을 것이다.이러한 상황이 발생한 궁극적인 이유는 데이터 중복이 많기 때문인데, 중복되는 데이터가 많으면 많을 수록 데이터 수정시 중복되는 ..
2025.05.01
no image
[Database] 데이터 베이스 네이밍 규칙
흔히 데이터베이스를 작성할 때 지켜야할 국룰에 대해 알아보자테이블 명, 컬럼 명을 소문자로 작성하자테이블, 컬럼 명은 Java에서 변수를 설정할 때 사용하는 낙타 표기법 처럼 대소문자를 혼용하여 쓰지 않는다 !그 이유는 MySQL 같은 경우, 운영체제 설정에 따라 대소문자를 구분하여 해석하기도 하고, 대소문자를 구분하지 않고 해석하기도 하기 때문이다. -> 즉 그냥 오류를 없애려면 대소문자를 혼용하여 쓰지 말자 snake_case 를 사용하자낙타표기법에서는 우리가 tableName 처럼 대소문자를 구분하여 띄워쓰기를 표현하였는데, 이 대신 _(언더바) 문자를 이용하여 띄워쓰기를 표현하자tableName // 이런거 안됨table_name // 요롷게 쓰자 축약어를 쓰지 말자코드는 팀원 모두가 이해할 수 ..
2025.05.01
no image
[Database] Primary Key (PK), Foreign Key(FK)
패널티킥, 프리킥 아니다.. 진짜 뒤진다..Primary Key(PK) -> 기본키우리는 서로를 구분할 수 있도록 각자 고유의 주민 번호가 존재한다.주체가 사람이 아닌 다른 객체일 때, 각 객체를 구분하기 위해서 주민등록번호와 같은 PK(기본키)를 사용한다.기본키는 특정 데이터 값을 식별하기 위한 값으로, 반드시 다음과 같은 특성을 가진다기본키는 중복 되어선 안된다기본키의 값은 비어있으면 안된다 현업에선 이렇게 설정한다 카더라~~ 카더라는 공부하며 얻은 지식들을 적어보는 코너이다ㅋㅋ내가 아직 현직자가 아니므로 그냥 그렇다더라~ 하고 넘어가자어느 회사에서 데이터베이스를 관리할 때, 주민번호나 이메일 등을 PK로 설정하는 것을 볼 수 있다.하지만, 주민번호나 이메일은 상황에 따라 변동이 될 가능성이 있다. ..
2025.05.01
no image
[Database] 데이터베이스 모델링 (Database Modeling)
SQLD 시험을 준비하며, 정말 여러 SQL 구문을 만나고 실습을 해보았다.내 생각에 SQLD 시험을 준비하는 과정이나, SQL을 공부하는 것은 단순히 SQL 해석능력이 있는가를 알아보는 시험으로 느껴졌다.가장 중요한 점은 내가 과연 DB를 직접 설계하고 활용하고 최적화 할 수 있을까? 라는 생각이 늘 들었고, 학사 논문을 준비하는 과정에서 그나마 좀 여유롭게 실제 공부 내용을 적용해 볼 수 있도록 DB 설계에 대해 공부하려고 한다.(사실 말이 여유롭지 빡세게 해야한다 !)실제 설계로 넘어가기 전, 중요한 DB 개념들을 확실히 이해 하고 넘어가고자 한다. 앞으로 몇개의 포스팅은 DB 개념의 관한 것 일것이다.데이터 베이스 모델링 이란? (Database Modeling)우리는 웹 & 모바일 앱 등을 운영..
2025.05.01
블로그 재정비가 필요해
마지막학기를 다니며 논문, 학교 시험, 취업준비, 출근 등 여러가지를 병행하며 시간이 부족해졌고, 사실 블로그에 작성하던 글들은 정말 기초적인 부분들을 작성하던 것이라 느꼈습니다.이에 따라 블로그 방향성을 다시 잡기 위해 잠시 블로그를 쉬어가며, 잠시 재정비를 한 후에 전문적인 기술을 포스팅 할 수 있을 때 다시 돌아오도록 하겠습니다!모두 평안하시길 바랍니다 !
2025.04.18
no image
[Java] synchronized 키워드가 필요한 이유 (예시)
상황 가정 + 실패 예시아래 예시는 좋지 않은 예시이다.만약 두개의 스레드 각 10000번 돌려 두 스레드 값을 더하여 20000이 나오게 하는 프로그램을 작성한다고 가정하자.public class SyncTest1BadMain { public static void main(String[] args) throws InterruptedException { Counter counter = new Counter(); Runnable task = new Runnable(){ @Override public void run() { for (int i = 0; i 위 예시 결과는 아래와 같다. (운이 좋아 20000이 나..
2025.03.12
no image
[Java] 까먹지 말아야 할 Java 스레드 생명 주기 및 상태 전이
자바에서 스레드의 생명주기는 여러 상태(state)로 나누어지며, 각 상태는 스레드가 실행되고 종료되기까지의 과정을 나타낸다.New (새로운 상태)스레드가 생성되고 아직 시작되지 않은 상태Thread 객체는 생성되었지만, start() 메서드가 호출되지 않은 상태 Runnable (실행 가능 상태)스레드가 실행될 준비가 완료된 상태 → CPU에 올릴 수 있다start() 메서드가 호출되면 이 상태로 진입스레드가 실행될 준비가 되어있고, 실제로 CPU에서 작업할 수 있는 상태하지만 모든 Runnable 스레드가 동시에 실행되진 않고, 운영체제의 스케줄링 방식에 따라 차례대로 실행된다스케줄링 실행 대기열에 있거나, 현재 CPU에서 돌아가고 있는 스레드 구분 불가보통 실행 상태라고 칭한다 Blocked (차단..
2025.03.08
no image
[Java] 까먹지 말아야 할 Java 메모리 구조
자바의 메모리 구조 메서드 영역 (Method Area)메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리하는 영역이다 -> 프로그램의 모든 영역에서 접근 가능- 클래스 정보 : 클래스의 코드, 필드, 메서드, 생성자등 모든 코드 존재- static 영역 : static 변수 보관- 런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수 보관 -> 이후 네트워크 부분에서 사용되는 PORT 번호 등을 사용할 때 접근 스택 영역 (Stack Area)우리가 흔히 스레드라고 칭하는 그 스택이다. 스레드별로 하나의 실행 스택이 존재하며, 이 스택 영역에 스택 프레임을 저장 -> 지역변수, 메서드 호출 정보 등 보관- 스택 프레임 : 메서드를 호출할 때마다 하나의 스택 프레임이 쌓이고, 메서..
2025.03.04
no image
[Algorithm] 회문 문자열
설명앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.단 회문을 검사할 때 대소문자를 구분하지 않습니다.입력 첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.출력 첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.예시 입력 1 gooG예시 출력 1YES Solution 1import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class String7 { public static String Solut..
2025.02.16