본문 바로가기

전체 글

(5)
Java 의존성 역전하기 - Dependency Inversion (사례를 통한 학습) 이 글은 팀원들의 적극적인 코드 리뷰 참여를 계기로 쓰게 되었다. 코드 리뷰에서 나온 사례를 통해 의존성 역전하기를 구현해보기에 앞서 이 코드 리뷰 경험은 어느 정도 각색되었음을 밝힌다. 코드 리뷰 사례에서 나를 포함해 개발자 3명이 등장하는데 편의상 A와 B라고 부르겠다. A가 아래와 비슷한 형태의 코드를 GitHub Repository에 Pull Request를 날렸다. package param; import entity.Customer; public class CustomerParam { private final String name; private final Integer age; // A가 Refactoring 하기 전에는 Customer 생성 로직이 Service Class에 존재했다. pub..
Java Thread와 Concurrency(동시성) 이해하기 동시성에 관한 Library들이 계속 발전하면서 Java가 제공하는 Low level 수준의 동시성 키워드인 synchronized, voliatile과 동시성 메서드인 wait, notify는 개발자가 직접 사용할 일이 거의 없어졌다. 하지만 Library를 사용하여 Software를 개발하는 경우 Library를 의도대로 잘 사용하기 위해 내부에서 어떻게 동작이 되는지 잘 이해 할 수 있어야 하고, Library가 제공하지 않는 기능을 구현하기 위해서는 Low level 수준의 동시성 개념을 잘 알아두어야 할 필요성이 있다. Java에서의 동시성 개념을 이해하기 위해 Java Thread가 Hardware Thread와 어떻게 연관되어 동작하는지 알아보겠다. Hardware Thread 요즘 대부분의..
기본 타입과 boxing된 기본 타입 이해하기 어느 날 동료 개발자가 Boxing과 Unboxing을 이야기하는 것을 들었다. 창피하게도 무슨 말을 하는 것인지 몰랐다. 이펙티브 자바를 아직 다 읽기 전이라 몰랐을 법하다. 이펙티브 자바를 다 읽고 나서야 Boxing과 Unboxing을 어떤 의미로 사용하는 것인지 알게 되었다. 변명처럼 들리겠지만, 사실 Boxing 된 기본 타입과 Unboxing 된 기본 타입이라고 이야기를 했었으면 무슨 말인지 이해했을 거 같다. 나는 기존에 Boxing 된 기본 타입을 Wrapper Type이라 부르고, Unboxing 된 기본 타입은 Primitive Type이라 불렀었다. 지금도 이렇게 부르는 게 편하고 익숙하다. 하지만 많은 사람이 이펙티브 자바를 자바의 기본서처럼 많이들 읽으니 앞으로는 나도 Boxing..
TCP, UDP 차이와 3-Way-Handshake, 4-Way-Handshake 이해하기 TCP, UDP는 OSI 7 계층에서 4 계층인 전송 계층(Transport Layer)에 속한다. 전송 계층은 송신자와 수신자 간에 통신 서비스를 제공해 데이터를 상호 전달할 수 있게 해주는 계층이다. TCP(Transmission Control Protocol) TCP는 송신자와 수신자 간에 서로 연결이 수립되었음을 보장하기 위한 규약이다. 왜 서로 연결이 수립됨을 보장해야 되는 걸까? 연결지향형 프로토콜인 이유가 있을까? 송신자와 수신자의 연결이 수립됨으로써 얻을 수 있는 이점이 있다. TCP는 Full-Duplex, Point to Point 가상 회선 방식을 통해 패킷을 전송할 논리적 경로를 만들어 연결한다. 송신자와 수신자만의 전용 회선이 생기는 것이다. 둘 만의 전용 회선을 사용하기 때문에 ..
Statement VS PreparedStatement 차이점 Statement와 PreparedStatement에 대해 이야기 해보려고 한다. 흔히 둘의 가장 큰 차이점으로 Caching 여부를 언급한다. 과연 Caching이 되는 곳은 어디일까? Statement는 정말 Caching이 안 되는 것인가? Caching 구역을 두 군데로 나누어 볼 수 있다. DB에서의 Caching과 Application Layer에서의 Caching Statement, PreparedStatement 둘 다 첫 실행시에 아래와 같은 과정을 거쳐 DB에 쿼리가 실행된다. (1) Parsing (문장 분석) (2) Compile (3) Execute Statement, PreparedStatement 둘 다 (2) Compile이 발생할 때 DB에 해당 Query로 접근 계획이 C..