전체글 143

1. 이동진 독서법

공부하려고 도서관에 갔는데, 벽에 붙어있는 이달의 추천책? 에 이책이 있는걸 보았다. 평소 이동진 평론가에 대한 호감이 있던 터라, 읽어보고 싶어서 바로 대출하러 갔고, 코너에서 찾아봤는데 없길래 뭐지 이도서관 하다가 옛날 도서 코너에 있어서 오 내가 바보인거를 깨달았었다. 저자는 자신의 독서 습관을 그냥 옆에있는 사람에게 알려주듯이 설명해준다. 내가 볼때 결론은 하나인것 같다. 책을 읽으려면 즐거워야 할것. 또한 읽은 책에 대해 남들이랑 대화하거나 아니면 글로 감상을 남겨서 다양한 시야를 갖출 것. 요즘들어 한 2~3개월 정도 운동을 열심히한다. 거의 매일 빼먹지 않고 1시간 30분 ~ 2시간 정도를 하는거 같은데, 처음의 동기는 좀더 자신감을 얻고 자신을 가꾸기 위해서 였으나, 요즘은 그냥 운동하는게..

스프링 부트 핵심가이드 TIL - 11장 (Spring Security)

✍학습 키워드서비스의 인증과 권한 부여스프링에 보안을 적용할 때 사용하는 스프링 시큐리티에 대해 알아보자스프링 시큐리티애플리케이션의 인증, 인가 등의 보안 기능을 제공하는 스프링 하위 프로젝트 중 하나이다. 보안과 관련된 많은 기능을 제공하기 때문에 보안 관련된 기능을 더욱 편리하게 설계 할 수 있다.서블릿 필터(Servlet Filter)를 기반으로 동작하며, DispatcherServlet 앞에 필터가 배치되어 있다.클라이언트에서 애플리케이션으로 요청을 보내면 서블릿 컨테이너는 URI를 확인해서 필터와 서블릿을 매핑한다.스프링 시큐리티는 사용하고자 하는 필터체인을 서블릿 컨테이너의 필터 사이에서 동작시키기 위해 DelegatingFilterProxy를 사용한다.JWT(JSON Web Token)JWT..

스프링 부트 핵심가이드 TIL - 10장 (서버 간 통신)

✍학습 키워드 서버 간 통신 RestTemplate와 Webclient에 대해 학습 RestTemplate? 스프링에서 HTTP 통신을 손쉽게 사용하도록 설계 된 템플릿. RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다. 기본적으로 동기 방식으로 처리되며, 비동기를 원할땐 AsyncRestTemplate사용. 📝새로 배운 개념 RestTemplate 구현하기 일반적으로 RestTemplate는 별도의 유틸리티 클래스로 생성하거나 서비스 또는 비즈니스 계층에 구현된다. 서버 프로젝트에 요청을 날리기 위해 서버의 역할을 수행하면서 다른 서버로 요청을 보내는 클라이언트의 역할도 수행한다. RestTemplate를 사용하는 방법중엔 UriComponentsBuilder를 사용하여 파라미터를 연결해서..

스프링 부트 핵심가이드 TIL - 9장 (액추에이터)

✍학습 키워드 액추에이터 스프링 부트 액추에이터는 HTTP 엔드포인트나 JMX를 활용해 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다. JMX(Java Management Extensions)는 실행 중인 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API이다. 액추에이터를 추가하면 기본적으로 엔드포인트 URL로 /actuator가 추가되며 이 뒤에 경로를 추가해 상세 내역에 접근한다. 엔드포인트는 활성화 여부와 노출 여부를 설정할 수 있는데, 활성화는 기능 자체를 활성화 하는지 결정하고, 비활성화된 엔드포인트는 애플리케이션 컨텍스트에서 완전히 제거된다. ## 엔드포인트 활성화 management.endpoint.shutdown.enabled = true managemen..

스프링 부트 핵심가이드 TIL - 8장 (유효성 검사와 예외처리)

✍학습 키워드 유효성 검사와 예외처리 비즈니스 로직이 올바르게 작동하려면 데이터를 사전 검증하는 작업이 필요하다. 이를 유효성 검사 또는 데이터 검증이라 부른다. 자바에서 가장 신경 써야 하는 것 중 하나로 NPE가 있다. 일반적인 애플리케이션 유효성 검사의 문제점 계층별로 진행하는 유효성 검사는 검증 로직이 각 클래스별로 분산돼 있어 관리하기가 어렵다. 검증해야 할 값이 많다면 검증하는 코드가 길어지므로, 코드가 복잡해지고 가독성 떨어진다. 예외 처리 스프링 부트의 예외 처리 방식 웹 서비스 애플리케이션에서는 외부에서 들어오는 요청에 담긴 데이터를 처리하는 경우가 많다. 그 과정에서 예외가 발생하면 예외를 복구해서 정상으로 처리하기보다는 요청을 보낸 클라이언트에 어떤 문제가 발생했는지 상황을 전달하는 ..

스프링 부트 핵심가이드 TIL - 7장 (연관관계매핑)

✍학습 키워드연관관계매핑RDBMS를 사용할때엔 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하기란 불가능하다. 주로 조인을 사용하는데, JPA에서도 연관관계를 표현할 수 있다.One To One: 일대일(1:1)One To Many: 일대다(1:N)Many To One: 다대일(N:1)Many To Many: 다대다(N:M) 등이 있다.⇒ 어떤 엔티티를 중심으로 연관 엔티티를 보느냐에 따라 연관관계의 상태가 달라진다.영속성 전이 (데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성)영속성 전이(cascade)란 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것을 의미한다.📝새로 배운 개념단방향: 두 엔티..

스프링 부트 핵심가이드 TIL - 6장 (Spring Data JPA 활용하기)

✍학습 키워드 Spring Data JPA 활용하기 JPQL JPQL은 JPA Query Language의 줄임말로 JPA에서 사용할 수 있는 쿼리를 의미한다. JPQL의 문법은 SQL과 매우 비슷하다. SQL과의 차이점은 테이블이나 칼럼의 이름을 사용하는 것이 아니라 엔티티 객체를 대상으로 수행하는 쿼리이기 때문에 매핑된 엔티티의 이름과 필드의 이름을 사용한다. @Query 어노테이션 사용하기 데이터베이스에서 값을 가져올 때는 JPA와 같이 메서드의 이름만으로 쿼리 메서드를 생성 할 수도 있고 @Query 어노테이션을 사용해 직접 JPQL을 사용할 수도 있다. JPQL을 사용하면 JPA 구현체에서 자동으로 쿼리 문장을 해석하고 실행하게 됩니다. 주로 튜닝된 쿼리를 사용하고자 할때 직접 SQL을 작성한다..

스프링 부트 핵심가이드 TIL - 5장 (테스트 코드 작성하기)

✍학습 키워드 테스트 코드 작성하기 테스트 코드란? 우리가 작성한 코드나 비즈니스 로직 자체를 테스트하기 위해 작성한 코드를 의미한다. 테스트 코드를 작성하는 이유 → 개발 과정에서 문제를 미리 발견할 수 있다. Given-When-Then 패턴으로 테스트 코드를 작성 할 수 있다. 리포지토리 객체의 테스트 리포지토리는 개발자가 구현하는 레이어 중에서 가장 데이터베이스와 가깝다. findById(), save()등의 기본 메서드에 대한 테스트는 의미가 없다. (검증 되었기 때문에) 때문에 db를 연동한 테스트는 테스트 데이터를 제거하는 코드까지 포함해서 작성하는 것이 좋다. 📝새로 배운 개념 JUnit을 활용한 테스트 코드 작성 JUnit은 어노테이션 기반의 테스트 방식을 지원하는 대표적인 테스트 프레임..

스프링 부트 핵심가이드 TIL - 4장 (ORM)

✍학습 키워드 정의 ORM은 Object Relational Mapping의 줄임말로 객체 관계 매핑을 의미한다. 자바와 RDB의 테이블을 자동으로 매핑하는 방법이다. ORM은 큰 개념이고 JPA는 더 구체화된 스펙을 포함한다. 하이버네이트 자바의 ORM 프레임워크이다. 영속성 컨텍스트 영속성 컨테스트는 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다. DAO설계 DAO(Data Access Object)는 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체이다. JPA에서 DAO의 개념은 리포지토리가 대체하고 있다. 규모가 작은 서비스에서는 DAO를 별도로 설계하지 않고 바로 서비스 레이어에서 데이터베이스에 접근해서 구현하기도 하지만, D..

스프링 부트 핵심가이드 TIL - 3장 (기본 API 개발)

✍학습 키워드 정의 HTTP 메서드에 해당하는 API를 개발하고 필요한 내용 찾기 외부의 요청을 받아 응답하는 기능을 구현해서 컨트롤러 구성 알아보기. 컨트롤러 및 관련 어노테이션 학습 GET(리소스 조회) / POST(리소스 저장) / PUT(리소스 값 업데이트) / DELETE(리소스 삭제) 📝새로 배운 개념 @RequestMapping 별다른 설정 없이 해당 어노테이션을 선언하면 HTTP의 모든 요청을 받는다. 어노테이션의 method 요소의 값을 RequestMethod.GET으로 설정하면 요청을 GET으로만 받는 @PathVariable을 활용한 GET 메서드 구현 실무에서는 매개변수를 받지 않는 메서드가 거의 안쓰임 (데이터를 주고받기 때문에) URL에 값을 담아 요청을 보낸다(GET 방식) ..