Backend/Spring

Backend/Spring

[Web] Servlet이란?

✍ Web Server와 WAS(Web Application Server) Web 인터넷을 기반으로 한 정보를 공유, 검색할 수 있게 하는 서비스이다. 웹의 핵심 구성요소로는 URL(주소), HTTP(통신 규칙), HTML(내용) 등이 있다. Server 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템이다. Web Server 웹 브라우저(클라이언트)로부터 HTTP 요청을 받아 HTML 문서와 같은 정적 컨텐츠를 제공하는 프로그램이다. 이후 요청에 따른 비즈니스 로직 처리나 DB 연동 문제를 해결하기 위해 등장한 것이 WAS이다. ex. Apache HTTP Server, Microsoft IIS, NGINX 등 Web Application 웹 브라우저에서 실행되는 응용 프로그램이다..

Backend/Spring

[Spring] 객체 지향과 SOLID 원칙

이번 게시물에서는 SOLID 원칙에 대해 정말 찍먹으로 다루고자 한다. 추후 읽을 예정인 Clean Code의 저자 로버트 C. 마틴이 2000년대 초반 객체 지향 설계의 다섯 가지 기본 원칙으로 제시한 것이 SOLID 원칙이다. 생각해보면 결국 스프링 또한 객체 지향을 지키기 위한 하나의 수단일 뿐이다. High Cohesion - Loose Coupling을 이루기 위한 방법과 스프링은 SOLID 원칙을 어떤 방식으로 설계하여 지키고자 하였는지 알아볼 생각에 설렐 뿐 .. 그러기 위해 SOLID 원칙에 대해 먼저 알아보도록 하자. - SPR(단일 책임 원칙: Single Responsibility Principle) - OCP(개방-폐쇄 원칙: Open/Closed Principle) - LSP(리스..

Backend/Spring

[Spring] 스프링 빈과 의존관계

거의 반년동안 스프링 스터디에서 진행하였던 블로그 프로젝트가 마무리가 되고 현재는 김영한님의 강의를 보면서 부족했던 부분을 보완하고 있다! 그 당시에 스프링을 처음 접하기도 하고 그때그때 필요한 부분들을 공부하는 방식으로 프로젝트를 하였더니 장단점이 분명했다. 단점은 순차적인 방식으로 공부를 하지 않아 부족한 개념들이 있다는 것이고, 장점은 그렇기 때문에 삽질 과정에서 얻은 것들도 많았다. (삽질은 옳다.) 부족했던 개념 중 하나가 스프링 빈과 의존관계였다. 스터디에서 다른 분들은 자바 코드로 직접 스프링 빈을 등록하는 방식으로, 나는 컴포넌트 스캔과 자동 의존관계 설정하는 방식으로 하였다. 그 당시에는 두 방식의 차이와 동작 방식에 대한 이해가 부족하였다. 그래서 이번 포스트에서는 부족했던 개념 중 스..

Backend/Spring

[Spring Boot] JPA Auditing 기능 사용하기

JPA Auditing을 사용하는 이유 보통 Entity는 해당 데이터의 생성시간과 수정시간을 포함한다. 그 이유는 생성/수정 정보는 유지보수에 있어서 굉장히 중요한 정보이기 때문.. 그러므로 항상 같이 저장해주는 것이 좋다. 그러나 매번 DB에 삽입할 때 날짜 데이터를 등록/수정하는 코드를 만드는 것은 비효율적이다. 이를 자동화하여 해결해주는 것이 JPA Auditing!! LocalDate Java의 기본날짜 자료형인 Date는 문제점이 많아서 사용하지 않는다. 그래서 Java8 이전에는 JodaTime이라는 오픈소스를 사용하였고, Java8부터는 LocalDate와 LocalDateTime을 사용한다. 먼저, BaseEntity 클래스를 생성하자. @Getter @MappedSuperclass @E..

Backend/Spring

[JPA] persist와 merge 이해(차이)

이 포스트는 스프링 스터디에서 영속성을 이야기하던 도중 “준영속 상태인 엔티티를 persist()해도 정상 동작하던데 merge() 대신에 사용해도 ㄱㅊ?”에서 시작됐다. 그래서 스터디 끝나고 새벽까지 혼자 개념 공부 다시 하면서 삽질한 결과, 문제가 발생한다! ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 책 3장을 공부한 후 대화를 나눈 거였는데 그 답이 15장에 있었다 하하. 삽질한 덕분에 영속성에 대해 깊게 이해하게 됐다. 문제가 되는 이유는 아래와 같다. persist()를 실행하고 db 혹은 1차 캐시에 같은 entity가 존재하면 javax.persistence.EntityExistsException(언체크 예외이며 트랜잭션 롤백을 표시) 에러가 발생한다. (참고, 언체크 예외는 예외 처리가 필수가 아니다.) 이렇게 간..

Backend/Spring

[Spring Boot] 공부하면서 정리해가는 yml 설정

앞으로 Spring Boot 공부하면서 계속 추가할 예정입니다. ▪ MySQL spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/{database}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 username: {이름} password: {비밀번호} ▪ JPA spring: jpa: defer-datasource-initialization: true show-sql: true hibernate: ddl-auto: create generate-ddl: true - defer-datasource-initialization Hibernate 초..

JOYERIM
'Backend/Spring' 카테고리의 글 목록