Spring 31

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

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

Spring/그 외 2023.02.08

[JPA] OSIV란?

모든 출처는 김영한 개발자님 [자바 ORM 표준 JPA 프로그래밍] 입니다. 예전에 정리한 적 있었는데, 당최 이해가 가야말이지... 그래서 결국 또다시 정리한다;;; (파도파도 끝이 없는 코딩의 세계) ✔️ OSIV란? OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다. 영속성 컨텍스트가 살아있으면, 엔티티는 영속 상태로 유지된다. 따라서 View에서도 지연 로딩을 사용할 수 있다. ※ 영속성 컨텍스트(persistence context) : 엔티티를 영구 저장하는 환경 ※ 영속성 컨텍스트에 엔티티를 저장하면, 이 엔티티는 언제 데이터베이스에 저장될까? → JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다. ..

Spring/JPA 2023.02.07

[JPA] Querydsl 찍먹해보기

Querydsl에 들어가기 전... 먼저 ✔️ JPQL이란? JPQL(Java Persistence Query Language)은 엔티티 객체를 조회하는 객체지향 쿼리다. → JPQL을 한마디로 정의하면 객체 지향 SQL. @Query 어노테이션 이용. 문법은 SQL과 비슷하고, SQL이 제공하는 기능을 유사하게 지원한다. JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공한다. JPQL은 SQL을 추상화하기 때문에 특정 데이터베이스에 의존하지 않는다. 데이터베이스 방언(Dialect)만 변경하면, JPQL을 수정하지 않아도 자연스럽게 데이터베이스를 변경할 수 있다. SQL보다 간결하다. SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ..

Spring/JPA 2023.02.06

[JPA] MyBatis와 JPA, 도대체 뭐가 다를까?

✔️ 들어가기 전... 왜 이 포스팅을 작성하나? (긴 글 주의) 먼저 난, MyBatis와 JPA에 한이 맺힌 사람이다. 국비학원에서 배운 MyBatis... 모든 걸 처음 배웠던 때이기도 했다. 그리고 국비학원 후기에도 올렸듯이, 규모가 큰 국비학원 과정이었던지라 당연히 취업깡패 커리큘럼인지 알았다. 이때까지만 해도, 힘들었던 내 인생 드디어 보상받는 줄 알았다. 왜 힘들었는지는 '국비학원 후기'에 대략 적혀있음. (아, 취업깡패 커리큘럼 맞긴 맞다. 다만 SI 깡패라서 그렇지.) 따라서 난, 학원 과정을 성실히 밟아가면 취업이 원활하게 될 수 있을 줄 알았다. (나름 학원에서 우수 학생 선정도 되고 그랬었음) 그리고 학원에서 누구보다 더 열심히 할 자신이 있었던 게, 좀 거만한 얘기일수도 있지만....

Spring/JPA 2023.02.06

[Spring] @SpringbootApplication의 원리

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

Spring/그 외 2023.01.27

[Spring] MVC1 & MVC2, DispatcherServlet

이번 포스팅도 역시 "기본"에 관한 것이다. '백견불여일타'라고, 아무리 읽고 또 읽어도 한번 코드 쳐보고 실행하는 것만도 못하다는 뜻이다. 난 이 말에 백번천번 동의한다. 원래 내 스타일도 이론을 쭉 훑고, 이해 갈 때까지 읽고 또 읽고 그 다음에 코딩을 하는 것이 아닌, 일단 한번 쳐보고 그 다음에 그 배경을 찬찬히 살펴본다. (그래도 어렵고 이해 잘 안 가는 건 함정) 그러면 내가 코드 쳐보면서 이해가 안 갔던 부분들이 '아 이래서 이런 거였구나?'하면서 뭔가 더 머릿속에 잘 들어오는 느낌;;; 뭐 물론 나만 그럴수도. 암튼 각설하고. 오늘은 MVC 패턴의 변화와 @SpringbootApplication에 대해서 다뤄볼 것이다. (글이 길어져서 @SpringbootApplication는 따로 뺌) ..

Spring/MVC 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