Spring/그 외 9

[Spring] 서블릿 필터 & 핸들러 인터셉터

오늘도 역시 기본에 대한 내용이다. 기본 중의 기본인 내용이지만... 이제야 정리한다. ✔️ 필터(Filter) / 인터셉터(Interceptor) / AOP 스프링에서 요청이 Controller로 들어오기 전에 처리해야 하는 작업이 있다. 대표적으로 인증 / 인가, XSS 방어, 데이터 압축, 인코딩 등이 있다. 💡 이러한 작업들을 공통 관심사로 보고, 분리하는 것이 효율적이다. → 이때 사용할 수 있는 것이 필터(Filter)와 인터셉터(Interceptor), Spring AOP이다. 이번 포스팅은 닮은 듯 다른 Filter와 Interceptor에 대한 내용이다. 💡 Filter와 Interceptor, AOP는 공통적으로, 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있다는 공통점이 있다...

Spring/그 외 2023.02.08

[Spring] @SpringbootApplication의 원리

원래는 MVC1 & MVC2, DispatcherServlet와 같이 담으려 했으나... 내용이 길어지는 관계로 분리 포스팅을 했다. ✔️ @SpringBootApplication이란? @Configuration + @EnableAutoConfiguration + @ComponentScan을 합친 것이다. 💡 @SpringBootApplication으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정한다. 특히나 @SpringBootApplication이 있는 위치부터 설정을 읽어가기 때문에, 이 클래스는 항상 프로젝트의 최상단에 위치해야만 한다. ✔️@SpringBootAplication의 내부 구조 @Target({ElementType.TYPE}) @Retention..

Spring/그 외 2023.01.27

[Spring] 스프링 성능 최적화에 대한 고찰

어느날 문득 무작정 스프링을 쓰는 것보단, 왜 쓰는지에 대해 생각을 해보면서 코딩을 하면 좋을 것 같다는 생각이 들었다. 난 실무를 경험한 적이 없으므로, 실무를 하며 "아 이렇게 해야겠구나"라는 체감을 한 적이 없다. 그래서 어쩔 수 없이 아쉽지만 이론상으로라도 접해야겠다. (그냥 아무 생각 없이 하는 것보단 나을 것 같음) 제일 먼저 찾아본 자료는 [REST API를 개발할 때, 성능 최적화를 하는 방법들]에 대해서다. 제일 중요한 건 엔티티를 웹에 노출해서는 안 된다고 한다. 그럼 어떻게 해야 할까? → 간단하다. 별도의 DTO를 만들어, 거기서 조회한 엔티티를 넣어서 반환해주면 된다. 문제점 JPA로 애플리케이션을 개발할 때 발생하는 다양한 성능 문제와 해결 방안을 알아보자. N + 1 문제 JP..

Spring/그 외 2023.01.24

[Spring] 왜 스프링을 쓰는가? (특징 & 계층 구조)

Spring을 왜 쓰는가에 대한 고찰... (개발자들의 생산성을 높이기 위해 굉장히 최적화하였다.) Spring Framework Java 기반의 플랫폼 개발을 위한 오픈소스 애플리케이션 프레임워크 중 하나. ※ 프레임워크 : 개발할 때 설계 기본이 되는 뼈대나 구조, 환경 (애플리케이션 흐름의 주도권을 가지고 있음) 재사용성, 확장성 부분에서 객체 지향 설계 원칙에 맞아 개발을 쉽게 할 수 있도록 도와주고, 개발자들이 핵심 로직을 효율적으로 개발할 수 있도록 기본 틀, 공통 프로그래밍 모델과 API를 제공한다. ※ Core (DI, Ioc) : 스프링의 근간. 내가 만든 클래스를 스프링이 직접 관리하여 어플리케이션을 동작하게 한다. 스프링의 밑바탕 판. Spring Framework 핵심 기술 1. 스..

Spring/그 외 2023.01.23

Spring(스프링) 주요 어노테이션 정리

프로젝트 하다가 파일 업로드가 안 돼서 몇 주를 에러 찾느라 눈이 빠졌었음. 코드 한줄한줄 다시 읽고, 구글링 오지게 해도 발견 안 되던 원인이 알고보니 @Configuration 어노테이션 안 넣어서 파일을 못 불러오는 거였음. 아 완전 어이없음. 내가 이런 기본도 안 되어 있다니... 암튼 어이없어서 정리한 스프링 주요 어노테이션 정리이다. 내가 보려고 정리하는 거라, 충분한 지식 전달이 잘 안 될 수도 있음. 그러면 내가 하단에 남긴 출처 블로그들 가서 읽어보시길... 스프링 주요 어노테이션 1. @Configuration @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면, @Autowired로 Bean을 부를 수 있다. 2. @ComponentSc..

Spring/그 외 2023.01.22

Dto, Controller, Service

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 내가 보려고 쓰는 Spring 프로젝트 구조 모든 응답 Dto는 DTO 패키지에 추가 등록 / 수정 / 조회 API 만들기 API 를 만들기 위해 총 3개의 클래스가 필요하다. Request 데이터를 받을 Dto API 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service 🚨 오해 Servuce에서 비즈니스 로직을 처리해야 한다. 하지만, 전혀 그렇지 않다. 그럼? 💡 Service는 트랜잭션, 도메인 간 순서 보장의 역할만 한다. 그럼 비즈니스 로직은 누가 처리하나? 간단히 각 영역을 소개하자면 다음과 같다. Web Layer 흔히 사용하는 컨트롤러(@Controller)와 JSP / Fr..

Spring/그 외 2023.01.07

domain, JpaRepository

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 내가 보려고 쓰는 Spring 프로젝트 구조 들어가기 전... 내가 보려고 쓰는 프로젝트 구조 스프링 부트에서 JPA로 데이터베이스를 다뤄보자 왜 JPA를 쓸까? 왜 ❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓ 국비학원에서 가르친 MyBatis... 이것은 곧 SQL 매퍼(mapper)이다. 하지만 이것은 실제로 개발하는 시간보다 SQL을 다루는 시간이 더 많았다. 분명 "객체지향 프로그래밍을 배웠는데, 왜 객체지향 프로그래밍을 못할까?" → 객체 모델링보다는 테이블 모델링에만 집중하고, 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 했다. → 이것은 곧 기형적인 형태이다. 어떻게 하면 관계형 데이터베이스를 이용하는 프..

Spring/그 외 2023.01.07

스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 책을 보며 따라하기 기록 1. OAuth 동의 화면 책과 좀 다른 부분이 있다. 구글링해보니 User Type을 '외부'로 체크해야 한다고 함. 2. enum Role import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum Role { GUEST("ROLE_GUEST", "손님"), USER("ROLE_USER", "일반 사용자"); private final String key; private final String title; } → 스프링 시큐리티에서는 권한 코드에 항상 ROLE_이 앞에 있어야..

Spring/그 외 2023.01.04

혼자 구현하는 웹 서비스

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 내가 보려고 적는 기능 설명들 1. domain 패키지 도메인을 담을 패키지이다. 💡 도메인이란? → 게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역이다. 🚨 기존에 MyBatis와 같은 쿼리 매퍼를 사용했다면, dao 패키지를 떠올리겠지만, dao 패키지와는 결이 다르다. 그간 xml에 쿼리를 담고, 클래스는 오로지 쿼리의 결과만 담던 일들이 모두 도메인 클래스라고 불리는 곳에서 해결된다. 2. @NoArgsConstructor 기본 생성자 자동 추가 3. Entity 클래스에는 Setter 메소드가 없다. 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분하기 위..

Spring/그 외 2023.01.03