Maven과 Gradle 차이점(https://stackify.com/gradle-vs-maven/\* XML이란..Thymeleaf란..톰캣(Tomcat)이란..logging 이란..json 이란..HttpMessageConverter란..TDD개발이란..
한 클래스는 하나의 책임만 가져야 한다.하나의 책임이라는 것은 모호하다.클 수 있고, 작을 수 있다문맥과 상황에 따라 다르다.중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다.예) UI 변경, 객체의 생성과 사용을 분리장점쉬
스프링에서 빈을 등록하는 법은 여러가지가 존재한다.@Controller, @Service, @Repository 등으로 빈으로 등록하는 법이 있고 configuration 관련 객체는 @Bean, @Componet으로 스프링 컨테이너에 빈으로 등록할 수 있다. 물론 @
개발을 하다가 굳이 domain과 DTO를 왜 같이 써야할까?라는 의문점이 생겼다. 내가 배운 DTO는 client와 controller, controller와 service 사이의 객체 전달을 위해 사용하는 것이라 생각했는데 굳이 객체 전달을 위해서라면 그냥 doma
스프링 시큐리티는 스프링 기반 어플리케이션의 보안(인증과 인가)를 담당하는 스프링 하위 프레임워크이다.보안과 관련해서 체계적으로 많은 옵션들을 제공해주기 때문에 개발자의 입장에서는 하나하나 보안 관련 로직을 작성하지 않아도 된다는 장점이 있다.스프링 시큐리티는 인증과
이전 포스트에서 jwt + spring security를 이용하여 로그인을 구현했다. 그러나 로그아웃을 구현하려 하였으나 jwt을 만료시키는 것 외에 따로 방법이 없었다. 그래서 검색해보니 redis를 이용하여 로그아웃을 구현할 수 있었다. 그러나 나는 redis를 한
애플리케이션 구조 여러 애플리케이션 구조 중 가장 단순하고 많이 사용하는 구조는 역할에 따라 3 계층으로 나누는 방법이다. 프레젠테이션 계층 : UI와 관련된 처리, 웹 요청과 응답, 요청 검증 등을 담당한다. 주요 사용 기술로는 gRPC, HTTP, 서블릿, 스프링
싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 예를 들어 사용자가 100명이라면 서버에 100번 요청을 보내면 서버에서는 100개의 인스턴스를 만들었다가 응답을 보낸 후 100개의 인스턴스를 삭제하는 과정을 거쳐야 한다.그러나
컴포넌트 스캔 기존 스프링은 스프링 컨테이너에 빈을 등록하기 위해서는 XML이나 @Bean을 통하여 스프링 컨테이너에 등록하였다. 그러나 컴포넌트 스캔(@ComponentScan)을 통하여 스프링이 자동으로 빈에 등록하는 기능이 생겼다. @ComponentScan을
커넥션 풀 서버에서 데이터베이스 커넥션을 얻으
클라이언트 데이터를 저장할때 서버에 데이터를 전달하고 서버는 DB에 데이터를 저장한다. 또한 클라이언트가 데이터를 조회 요청을 보내면 서버는 DB에서 데이터를 조회한다. 일반적으로 서버와 DB 사용법은 서버는 DB에 TCP/IP를 사용해서 커넥션을 연결하고 SQL을 D
데이터베이스에서는 트랜잭션이라는 개념을 지원하는데 트랜잭션이란 말 그대로 번역하면 거래라는 뜻이다. DB에서 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 에를 들어 작업이 여러개인 거래가 있는데 이중 몇개는 성공하고 몇개는 실패하면 이는 큰 문제가 될 것
애플리케이션 서버에서 커넥션을 얻는 방법은 JDBC DriverManager를 직접 이용하여 사용할 때마다 커넥션을 얻는 방법, 커넥션 풀에서 커넥션을 가져다 쓰는 방법 등 여러 방법이 존재한다.그렇다면 만약 내가 어플리케이션 서버에서 JDBC DriverManager
같은 타입의 빈이 2개 라면 어떻게 해야 할까? 스프링 컨테이너에 빈으로 등록될 때 개발자가 따로 이름을 설정해주지 않으면 자동으로 빈 타입
@Autowired는 DI시 생성자, 수정자, 필드, 메소드 등에 붙는 어노테이션이다. @Autowired는 스프링 컨테이너에 등록되어 빈에서 타입이 같은 빈을 매칭하고, 이 때 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭한다.같은 타입의 빈이
스프링에서 빈의 라이플 사이클은 다음과 같다.스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료따라서 빈이 생성되고 의존관계가 주입이 되면 초기화가 진행된다. 따라서 개발자는 의존관계가 주입되기
TDD, BDD 등 다양한 개발 방법이 있지만 아직까지의 나는 프로젝트 할 때 이러한 개발 방법을 도입해보지 못하고 있다. 나중에 해봐야지.. 이러면서 미뤘놓았다. 그러나 이번에 프로젝트 하면서 TDD는 하지 못했지만 테스트 코드라도 한번 작성하고 커버리지까지 측정해보
Firebase란 Google이 제공하는 클라우드 기반의 다양한 서비스를 제공하는 플랫폼이다. 웹과 모바일 앱 개발에 필요한 여러 가지 기능을 제공하여 개발자들이 애플리케이션을 더 쉽고 효율적으로 만들 수 있도록 도와준다.프로젝트 진행 중에 상대가 쪽지를 보내면 타 어
@Transactional 전파에 대해 공부하면서 테스트 코드를 작성하던 도중 이유를 알수 없는 오류를 경험했다. 트랜잭션이 롤백되어야 하는 로직인데 롤백 되지 않고 커밋되는 현상 비즈니스 로직상 RuntimeException이 발생하여 트랜잭션이 커밋되지 않고 롤백
@Transactional을 사용할 때 읽기 용도의 메서드에는 readOnly=true 옵션을 설정할 때가 대부분이다. 그렇다면 readOnly의 사용하면 좋은 점이 무엇일까? 무조건적으로 읽기 작업의 트랜잭션에는 이 옵션을 키는 것이 맞을까?읽기 전용 틀랜잭션에서는
Logback이란 log4j 이후에 출시된 Java 기반 Logging Framework 중 하나로 가장 널리 사용되고 있다. SLF4j 의 구현체이며 Spring Boot 환경이라면 별도의 dependency 추가 없이 기본적으로 포함되어 있다.application.
스프링의 3대 요소라고 불리는 IoC/DI, PSA, AOP 중 DI에 대해서 예시를 통해서 완벽 이해해보자. DI가 왜 필요할까? 그냥 객체를 직접 의존 객체를 생성하면 되는데 굳이 생성자나, setter를 이용해서 의존하는 객체를 주입할까?이유는 바로 변경의 유연함
이전 포스트에서 DI에 대해서 알아봤다. 스프링은 조립기 역할을 한다고 했다. 코드를 보자. 위 코드를 보면 ImageDao 객체를 빈으로 등록한후 ImageLoadingService에 imageDao()를 통해 의존성을 주입시켜주고 있는 것을 볼 수있다. 이렇게 직
스프링 컨테이너는 설정 클래스의 정보를 읽어와 알맞은 빈 객체를 생성하고 각 빈을 연결(의존 주입)하는 작업을 수행한다. 스프링 컨테이너를 초기화를 해야 등록된 빈을 getBean()이나 다른 방법을 통해서 읽어와 사용할 수 있게된다. 컨테이너 사용을 마친 후 등록된
스프링의 3대요소 IoC/DI, AOP, PSA 중 AOP에 대해 알아보자. AOP는 Aspect Oriented Programming 한국어로 관점 지향 프로그래밍이다. 사실 이 단어로만 보면 무슨 느낌인지 정말 이해가 안갔다. 예시 코드를 보면서 설명해보겠다. 이