@Hudi
꾸준히, 의미있는 학습을 기록하기 위한 공간입니다.

Spring HandlerInterceptor를 활용하여 컨트롤러 중복 코드 제거하기

May 28, 2022

우아한테크코스 레벨2 마지막 미션인 장바구니 미션에서 인증과 인가를 구현하기 위해, Spring Interceptor 를 사용해야했다. 이를 위해 학습한 내용을 정리해보았다. 컨트롤러에서 발생한 중복 코드 웹 어플리케이션을 개발하다 보면, 컨트롤러에서 반복되는 로직을 실행해야할 경우가 존재한다. 가령, 해당 엔트포인트에 대한 인증(Authenticatio…


격리된 테스트 (Isolated Test) (feat. Spring 에서 테스트 격리하기)

May 19, 2022

격리된 테스트 (Isolated Test) 데이터베이스와 같은 공유 자원을 사용하는 테스트는 실행 순서에 따라 성공, 실패 여부가 결정되는 비결정적인(non-deterministic) 테스트가 될 수 있다. 이런 비결정적 테스트는 실패하면 버그가 원인인지, 비결정적 동작이 원인인지 알기 힘들다. 따라서 테스트는 실행 순서에 상관 없이 독립적으로, 결정적(…


테스트 더블 (Test Double)

May 15, 2022

테스트 더블 (Test Double) 테스트 더블은 영화를 촬영할 때 배우를 대신하여 위험한 역할을 하는 스턴트 더블(Stunt Double)이라는 용어에서 유래된 단어이다. 자동화된 테스트를 작성할 때, 여러 객체들이 의존성을 갖는 경우 테스트 하기 까다로운 경우가 있다. 예를 들어서 프로덕션 코드에서 Service Layer는 Dao에 직접적으로 의…


DAO (Data Access Object)

May 05, 2022

DAO (Data Access Object) DAO는 데이터베이스나 외부 파일 시스템과 같은 영속성 메커니즘에 접근하여 데이터의 CRUD(Create, Read, Update, Delete) 처리를 담당하는 객체 혹은 그러한 패턴을 의미한다. 세상에는 MySQL, PostgreSQL, MongoDB 등 다양한 영구 저장소가 존재한다. 또한 이를 사용하기…


POJO (Plain Old Java Object)

May 05, 2022

POJO POJO는 Plain Old Java Object 즉, 평범한 오래된 자바 객체를 의미한다. 그런데 조금 이상하다. 왜 굳이 평범한 자바 객체에 이름이 붙게 되었을까? 이를 이해하기 위해서는 POJO라는 용어가 어떻게 등장하였는지 배경을 알아볼 필요가 있다. POJO 용어의 등장 배경 우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 …


[DB] 트랜잭션(Transaction)

May 04, 2022

학습동기 최근 스프링에서 이라는 애너테이션을 적용해서 트랜잭션을 사용할 수 있다는 사실을 알게되었다. 스프링에서 트랜잭션을 제대로 사용해보기 전에 트랜잭션의 개념을 간단히 짚고 넘어가고자 학습하게 되었다. 트랜잭션이란? 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위해 여러개의 쿼리를 하나로 묶은 작업의 단위이다. 트랜잭션은 원자성(Atom…


REST(Representational State Transfer) API

May 04, 2022

API 란? API는 Application Programming Interface의 약자로, 소프트웨어간의 응답과 요청을 통한 데이터 통신을 위한 방법과 규칙을 의미한다. API는 OS에서도 제공 (e.g. Windows API) 할 수 있고, 프로그래밍 언어 (e.g. Java API) 에서도 제공할 수 있고, 웹 애플리케이션 (e.g. Facebook…


혼란스러운 도메인, 도메인 모델, 도메인 객체 용어 정리 😵‍💫

April 30, 2022

도메인에 대해 검색을 해보면, '해결하고자 하는 영역' 정도의 설명이 나온다. 그런데 프로그래밍을 할 때에는 무언가 주체적으로 비즈니스 로직을 수행하는 객체를 도메인이라고 부르기도 한다. 도메인이라는 용어 자체가 굉장히 추상적이고 넓은 범위로 사용되고 있어 레벨1 첫 미션부터 지금까지 굉장히 혼란을 느꼈다. 내가 가진 이 혼란을 정리하고자 관련된 여러 용…


계층화 아키텍처 (Layered Architecture)

April 30, 2022

Layered Architecture Layered Architecture는 소프트웨어 개발에서 가장 일반적으로 널리 사용되는 아키텍처이다. 구성되는 계층의 숫자에 따라 N 계층 아키텍처 (N-tier Architecture) 라고도 한다. 각 계층은 어플리케이션 내에서의 특정 역할과 관심사(화면 표시, 비즈니스 로직 수행, DB 작업 등)별로 구분된다.…


Spring Bean과 IoC Container

April 23, 2022

학습동기 우아한테크코스 레벨2에서 스프링을 처음 접해보며, 가장 신기하게 생각되었던 것은 IoC였다. 내가 직접 객체를 생성하거나, 관계를 만들어주지 않았음에도 불구하고, 애너테이션만 붙이면 스프링이 어딘가에서 객체를 생성하고 꺼내와 주입해주었다. 관련된 개념을 찾아보니 핵심 키워드로는 Spring Bean과 Spring IoC Container인 것 같…