Foreign Key

foreign key를 사용하는 이유는 참조 무결성을 위해서이다. 연관관계에 있는 테이블에서, 외래키로 지정된 컬럼 데이터가 부모의 기본키 외 다른 값을 가질 수 없게 하여 외래키 컬럼에 저장될 수 있는 데이터를 제어하게 된다.예를 들어, 유저, 주문 테이블이 있고 주

2023년 1월 17일
·
0개의 댓글
·

스프링 빈 생명주기

스프링 컨테이너는 빈을 관리한다. 싱글턴 레지스트리 기능을 제공하거나 의존 주입 등을 하는 것 외에도 빈 객체의 생명주기 역시 관리한다. 컨테이너가 초기화될 때 빈 객체를 생성하여 등록, 의존성 주입을 하고 컨테이너가 종료될 시점에 빈 객체 역시 소멸시킨다. 스프링 빈

2022년 12월 11일
·
0개의 댓글
·

Spring DI와 IoC

스프링은 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 그러면 좋은 객체지향 프로그래밍이란 무엇일까?좋은 객체지향의 요소 중 하나는 분명 '유연하고 변경이 용이하다'라는 특성을 가진다. 이는 자바 언어의 다형성을 활용하여 달성할 수 있다.즉, 인

2022년 12월 6일
·
0개의 댓글
·

자바의 Generic

제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 말한다. geeksforgeeks에서는 parameterized types 라고도 표현하는데, 말 그대로 타입을 파라미터로 넘겨 클래스나 메서드 내에서 사용하는 것을 뜻한다.예전에는 여러 타입을

2022년 11월 6일
·
0개의 댓글
·

Synchronized 키워드

멀티스레드 환경에서는 여러 스레드가 변경 가능한 공유 데이터를 동시에 수정하려 할 때 레이스 컨디션이 발생한다. 자바에서는 이러한 레이스 컨디션을 회피할 수 있도록 synchronized 기능을 제공한다. synchronized 키워드를 붙이면 해당 블록에는 오직 하나

2022년 11월 1일
·
0개의 댓글
·

의존성 역전 원칙(DIP)

로버트 마틴은 DIP에 대해 이렇게 말했다.1\. 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다, 둘 모두 추상화에 의존해야한다2\. 추상화는 구체적인 사항에 의존해서는 안된다, 구체적인 사항은 추상화에 의존해야한다DIP는 결국 클래스 간의 커플링을 감소시키

2022년 10월 26일
·
0개의 댓글
·

인터페이스 분리 원칙(ISP)

Robert C. Martin은 해당 원칙에 대해 이렇게 말했다.“Clients should not be forced to depend upon interfaces that they do not use“즉 인터페이스를 억지로 공통으로 쓰려하는 것 보다 차라리 분리해서

2022년 10월 20일
·
0개의 댓글
·
post-thumbnail

개방 폐쇄 원칙(OCP)

Bertrand Meyer은 1988년에 그의 논문에서 개방 폐쇄 원칙을 아래와 같이 설명했다."Software entities (classes, modules, functions, etc.) should be open for extension, but closed f

2022년 10월 20일
·
0개의 댓글
·

단일 책임 원칙(SRP)

SOLID란 객체지향 5대 원칙을 말한다. SRP(단일 책임 원칙), OCP(개방폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙) 이 다섯가지의 앞글자를 따서 만든 원칙이다. 해당 원칙을 준수해가며 소프트웨어를 설계하

2022년 10월 19일
·
0개의 댓글
·
post-thumbnail

HTTP vs HTTPS

HTTPS는 HTTP의 암호화된 버전이다. 두 프로토콜의 차이점은 HTTPS는 TLS/SSL을 사용하여 HTTP 요청과 응답을 암호화하는 것, 그리고 이 요청과 응답에 디지털 서명을 한다는 것이다. 그 결과로 HTTPS는 HTTP보다 훨씬 더 보안이 강화되어있다. HT

2022년 10월 13일
·
0개의 댓글
·

OSI 모델

예전 네트워크 시스템은 같은 제조사가 만든 장비끼리만 통신이 가능했다. 통일되지 않은 시스템으로 인해 통신에 한계가 있었고 국제적으로 통신하는데에는 더욱 더 큰 방해가 되었다. 이러한 한계를 극복하기 위해 일종의 국제 표준이 필요했는데, 이에 국제 표준화 기구에서는 다

2022년 10월 12일
·
0개의 댓글
·

TCP 3-Way 및 4-Way Handshake

TCP(Transmission Control Protocol)는 OSI model의 transport layer에서 사용되는 연결지향적인 프로토콜이다. 좀 더 자세히 살펴보자.이는 송신자와 수신자가 반드시 서로 연결되어서 데이터를 주고 받는 것에 동의해야 한다는 의미이

2022년 10월 9일
·
0개의 댓글
·

자바에서의 volatile

volatile은 여러 최적화 기법 중 캐싱과 리오더링으로 발생할 수 있는 이슈를 예방할 수 있다. 이러한 이슈들을 살펴보고 volatile을 통해 어떻게 대처할 수 있을지 알아보자.프로세서는 프로그램 instruction을 실행시키며 이를 위해 RAM으로부터 해당 i

2022년 10월 9일
·
0개의 댓글
·
post-thumbnail

자바의 wait()와 notify() 메서드

(출처: https://www.baeldung.com/java-wait-notify)위는 스레드의 라이프 사이클에 대한 간략한 다이어그램이다. 스레드는 생성된 후에 start() 메서드를 통해 실행된다. 정확히는 Runnable과 Running 상태를 왔다갔다

2022년 10월 5일
·
0개의 댓글
·
post-thumbnail

자바의 Thread

로세스는 운영체제로부터 자원을 할당받은 작업의 단위이며 스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다.프로그램을 실행시키면 운영체제가 프로그램에 독립적인 메모리 공간을 할당해준다. 즉 프로세스는 메모리에 올라간 프로그램 실행 단위이다.하나의 프로세스

2022년 10월 5일
·
0개의 댓글
·

System.out.println() 사용을 자제해야 하는 이유

왜 프로덕션 코드에서 System.out.println() 말고 Logger나 Log4j 같은 로깅 프레임워크를 사용해야 할까? 크게 2가지 이유가 있다.여러 로깅프레임워크는 로그 레벨에 따라 디버깅 정보를 로그하게끔 해준다. 로깅 프레임워크에서 제공하는 로그 레벨은

2022년 10월 2일
·
0개의 댓글
·

람다에서 사용하는 외부 지역 변수가 final 혹은 effectively final이어야 하는 이유

이전 아티클에서 익명클래스에 대해 소개하였다(참고: 익명클래스). 이러한 익명클래스와 관련된 한가지 문제는 익명클래스 구현이 매우 간단한 경우, 예를들어 하나의 메서드만 포함하는 인터페이스를 익명클래스로 구현한다면, 불필요하게 어렵게 보일수 있고 또한 가독성도 떨어진다

2022년 10월 1일
·
0개의 댓글
·

익명클래스(Anonymous Classes)

익명클래스는 아래의 다이어그램에서 보듯이 일종의 중첩클래스이다. (참조: https://www.baeldung.com/java-anonymous-classes)익명클래스는 다른 내부클래스들과 달리 이름을 갖지 않으며 사용하는 시점에 선언과 함께 초기화를 해줘야

2022년 10월 1일
·
0개의 댓글
·

HashMap

(출처: https://memostack.tistory.com/234)List와 Set과 달리 HashMap은 Collection 인터페이스가 아닌 Map을 구현한 클래스이다. HashMap은 키-밸류 페어로 값을 저장하며 저장할 때와 값을 꺼내올 때의 시간복

2022년 9월 30일
·
0개의 댓글
·

HashSet

HashSet은 내부적으로 HashMap을 사용하며 중복을 허용하지 않는 자료구조이다.중요한 특징으로는 아래와 같다.데이터를 중복없이 저장하며 null을 허용한다.내부적으로 HashMap을 사용한다.순서를 보장하지 않는다.스레드 세이프하지 않다.add() 메서드를 통해

2022년 9월 28일
·
0개의 댓글
·