개발
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl7inp%2FbtrWbLzdtQn%2FbVZB61XO5iKD4G6Pk3sKjK%2Fimg.png)
[Spring Boot & AWS] Chpt 3 - 스프링 부트에서 JPA로 데이터베이스 다뤄보자
이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 웹 서비스를 개발하고 운영하다 보면 항상 다루어야 할 것이 바로 데이터베이스(DB)이다. 과거에는 직접 SQL문을 다루면서 DB를 관리하다 보니 어려움이 많았지만, 요즘은 JPA라는 기술을 사용해서 간단하게 관리할 수 있다. JPA라는 자바 표준 ORM 기술을 사용해서 객체지향 프로그래밍을 사용하여 관계형 데이터베이스를 관리할 수 있다. 편리성 덕분에 1. JPA 소개 현대의 웹 애플리케이션에서 Oracle, MySQL 등의 관계형 데이터베이스(RDB)는 필수적인 요소이다. 그렇다 보니 객체를 관계형 데이터베이스에서 관리하는 것은 무엇보다 중요하다. 그리고 관계형 데이터베이스가 중심이 되감에 따라 코드 또한 애..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHZusp%2FbtrV746haMk%2Fu1IDljsA4WlvjKw2iKdSG0%2Fimg.jpg)
[Spring] 의존성 주입이란?
의존성 주입(Dependency Injection)은 스프링의 핵심 개념 중 하나로 흔히 DI로 줄여 쓰기도 한다. 의존관계 주입이라고 하기도 하고 다양한 번역이 존재하지만 이 글에선 의존성 주입으로 통일하도록 하겠다. 1. 의존성 (Dependency) 의존성 주입에 대해 알기 전에 의존성이 무엇인지 알아봐야 할 필요가 있다. 일단 '의존한다'라는 것은 무엇일까? 흔히 우리가 '철수가 영희에게 의존한다'라는 표현을 하면 철수가 영희에 의해 좌지우지된다고 생각할 수 있다. 즉, 영희의 행동과 상태의 변화가 일어나면 그 영향이 철수에게도 미친다는 것이다. 철수와 영희를 프로그램의 일부로써 생각한다면 영희의 기능 변경이나 추가가 철수에도 영향을 끼친다는 것이다. 의존대상 B가 변하면, 그것이 A에 영향을 미..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCOsjP%2FbtrVT5MK1tV%2FolkIFDctAPL9km2Dc9nJW1%2Fimg.png)
[Spring Boot & AWS] Chpt 2 - 스프링 부트에서 테스트 코드를 작성하자
이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 1. 테스트 코드 소개 1) TDD와 단위 테스트(Unit Test) ● TDD 테스트가 주도하는 개발을 뜻한다. 테스트 코드를 먼저 작성하는 것부터 시작한다. 레드 그린 사이클을 거치며 개발한다. 레드 그린 사이클은 다음과 같다. 항상 실패하는 테스트를 먼저 작성 (Red) 테스트가 통과하는 프로덕션 코드 작성 (Green) 테스트를 통과하면 프로덕션 코드를 리팩토링 (Refactor) ● 단위 테스트 TDD의 첫 번째 단계인 기능 단위의 테스트 코드 작성을 뜻한다. TDD처럼 테스트 코드를 꼭 먼저 작성할 필요도 없으며, 리팩토링 또한 포함되지 않는다. 순수하게 테스트 코드를 작성하는 것만을 의미한다. 이번..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcwcNv%2FbtrVRCDKWgd%2Fn2g7s5QE5vK0nKiHXbhgI0%2Fimg.png)
[Spring Boot & AWS] Chpt 1 - 인텔리제이로 스프링 부트 시작하기
이 글은 이동욱 님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽고 정리한 글입니다. 1. 인텔리제이 소개 자바 웹 개발 IDE의 쌍두마차가 있다. 바로 이클립스 재단의 '이클립스'와 젯브레인즈의 '인텔리제이'다. 이 책의 저자는 이클립스에 비해 인텔리제이가 다음과 같은 장점이 있어 추천하신다고 한다. 강력한 추천 기능 훨씬 더 다양한 리팩토링과 디버깅 기능 이클립스의 Git보다 훨씬 높은 자유도 프로젝트 시작 시 인덱싱을 하여 파일을 비롯한 다양한 자원에 대한 빠른 검색 속도 HTML, CSS, JS, XML에 대한 강력한 기능 지원 자바, 스프링 부트 버전업에 맞춘 빠른 업데이트 실제로 네이버, 카카오, 라인, 쿠팡, 우아한형제들 다양한 IT 서비스 기업에선 현재 인텔리제이를 공식 IDE로 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FziIqK%2FbtrR8uu1vPk%2FsgXDj07HqwPt0KC2VZgv3K%2Fimg.png)
[ToDo List using JPA] 2. Todo List 구현
1. 기본 설정 ToDo List 프로젝트의 기본 설정을 위한 작업들이다. // build.gradle dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.h2database:h2' compileOnly 'org.projectlombok:lombok:1.18.24' runtimeOnly 'com.h2database:h2' ann..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqe61P%2FbtrRzkAOQ0G%2FMS8u0VmP54KC4iik0Bfok0%2Fimg.png)
[Spring] 영속성 컨텍스트와 @Transactional 어노테이션
들어가기에 앞서 스프링 Todo List 프로젝트 중 JPA의 Dirty Checking 기능이 작동하지 않아 이유에 대해 함께 프로젝트를 진행 중이던 팀원에게 물어보니, @Transactional을 Update Service에 붙이지 않아서 Dirty Check가 이루어지지 않았다는 사실을 알려주었다. 단순히 @Transactional은 오류 발생 시 롤백을 위함으로 알고 있던 나에게는 충격으로 다가왔다. 그렇기에 @Transactional 어노테이션에 대해 제대로 정리를 해야겠다는 생각을 하게 되었다. @Transactional과 영속성 컨텍스트에 대해 알아보기 전에 먼저 JPA의 Dirty Checking 기능에 대해 알아보겠다. JPA Dirty Checking JPA는 Entity Manager..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdizhWV%2FbtrRyUPNde4%2FeMuReXM0RXfStg0JkIlwFk%2Fimg.png)
[Spring] Open-In-View란?
Open-In-View는 Open-Session-In-View 또는 Open-EntityManager-In-View라고 불리기도 한다. Default값은 true이며, 이 경우에는 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. API에서는 클라이언트에게 응답될 때까지, View에서는 View가 렌더링될 때까지 영속성 컨텍스트가 살아있다. 아래처럼 application.properties에서 false로 설정해주었다면, 영속성 컨텐스트는 트랜잭션을 종료할 때 같이 닫히게 된다. spring.jpa.open-in-view=false 위 그림은 OSIV(Open-Session-In-View)가 True일 때를 보여준다. 위 그림은 OSIV(Open-Session-In-View)가 False일 ..
[ToDo List using JPA] 1. CRUD와 JPA란?
CRUD란 ToDo List를 만들기에 앞서 CRUD에 대한 개념을 알아보고자 한다. CRUD는 컴퓨터 소프트웨어가 데이터를 다루는 가장 기본적인 방법 4가지를 의미한다. 각각 Create, Read, Update, Delete의 앞글자를 묶어서 일컫는 말이다. 1. Create (생성) 새로운 데이터를 생성하고, DB의 테이블에 이를 저장하는 것이다. SQL문의 Insert에 해당한다. 2. Read (읽기) DB의 테이블에 저장된 데이터를 읽어오는 것이다. SQL문의 Select에 해당한다. 3. Update (갱신) DB의 테이블에 저장 되어있는 데이터를 변경하는 것이다. SQL문의 Update에 해당한다. 4. Delete (삭제) DB의 테이블에 저장된 데이터를 삭제하는 것이다. SQL문의 De..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKxoTM%2FbtrQf36N0lC%2F8nFKxWE9Pl8MoYqUlfpeXK%2Fimg.png)
(스프링 기본) 9. 빈 스코프
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 빈 스코프란? 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스프링이 지원하는 빈 스코프들은 다음과 같다. 1. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 2. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNqM8T%2FbtrP8W7XO8T%2FMLfiMeps7HlGvndzBiInb0%2Fimg.png)
(스프링 기본) 8. 빈 생명 주기 콜백
이 글은 김영한 님의 스프링 핵심 원리 - 기본편 강좌 수강 후 정리한 글입니다. https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 빈 생명 주기 콜백 시작 스프링을 통해 객체의 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. 이 NetworkClient는 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 ..