과제 할당 -> 과제 분석 -> 개발 -> 테스트(리뷰) -> QA 및 버그 수정 -> 배포 -> 유지보수 과제 할당사업부, 마케팅 개발팀 등에서 개발 과제를 할당한다.과제 분석제공할 성능과 사용할 기술을 검토하고, 예상되는 문제가 있다면 해결 방법도 면밀히 분석
Spring Boot ? 설정하기 매우 복잡한 기존의 스프링의 단점을 보완하고자 출시한 자바 웹프레임워크이다. 빠르게 스프링 프로젝트를 설정할 수 있고 의존성 세트라고 불리는 스타터를 사용해 간편하게 의존성을 사용하거나 관리할 수 있다. 즉, 스프링 부트는 개발자가
제어의 역전(IOC)과 의존성 주입(DI) 스프링의 모든 기능의 기반을 IoC와 DI에 두고 있다. IoC IoC란 Inversion of Control을 줄인 표현이다. 직역하면 제어의 역전이 된다. 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아
스프링 부트 스타터 스프링 부트 스타터란 의존성이 모여 있는 그룹이다. 스타터를 이용해 필요한 기능을 간편하고 빠르게 설정이 가능하다. > 스타터는 spring-boot-starter-{작업유형}이라는 명명 규칙이 존재한다. 예를 들어 JDBC 관련 스타터는 spri
@SpringBootApplication 이해하기 위 클래스는 자바의 main() 메소드와 같은 역할을 한다. 즉, 여기서 스프링 부트가 시작이 된다. @SpringBootApplication 구성 (Ctrl 누르고 해당 애너테이션 클릭시 상세정보 확인 가능) >
스프링 부트 구조 스프링 부트는 다음 그림과 같이 각 계층이 양 옆 계층과 통신하는 구조를 따른다. 여기서 계층이란 각자의 역할과 책임이 있는 어떤 소프트웨어의 구성 요소를 의미한다. 각 계층은 서로 소통할 수는 있지만 다른 계층에 직접 간섭하거나 영향을 미치지는 않는
테스트 코드란? 작성한 코드가 의도대로 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드이다. 유지보수의 용이성, 코드 수정에 있어서의 편의성 등의 장점이 있다. 테스트 코드는 test 디렉토리에서 작업 한다. > 테스트 코드에는 대표적으로 AAA패
테스트 코드 작성 1. 테스트 코드 파일 생성 테스트 코드를 작성하고 싶은 클래스 위에 마우스 커서를 올려 놓고 Alt + Enter를 눌러 [createTest]를 누르면 해당 클래스의 테스트 파일이 자동으로 test/java/ 패키지 아래에 생성된다. 2. 테스
ORM이란 ORM은 Object-Relational-Mapping의 약자로 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법이다. ORM은 데이터베이스의 값을 객체처럼 사용한다. 따라서 SQL을 몰라도 자바 언어만으로 데이터베이스에 접근하여 데이터를 활용할 수 있다
Spring Data 스프링 데이터는 개발자의 엔티티 관리, 시점에 맞는 커밋 등의 부담을 줄여 비즈니스 로직에만 집중할 수 있도록 데이터베이스 사용 기능을 클래스 레벨에서 추상화한 인터페이스이다. CRUD를 포함한 여러 메소드가 포함되어 있으며, 쿼리도 알아서 짜줄
API API란 네트워크에서 프로그램 간에 상호작용을 하기위한 매개체이다. 클라이언트의 요청을 서버에 전달하고, 서버의 결과물을 클라이언트에게 반환해주는 역할을 한다. > 출처 https://www.postman.com/what-is-an-api/ REST(ful)
엔티티 구성 엔티티와 매핑되는 테이블 구조 > 코드 작성 > 임포트 관련 오류 메시지는 Alt + Enter를 눌러 첫 번째 패키지를 선택하면 된다. > 보통 DB의 테이블과 매핑되는 클래스들을 모아놓은 패키지를 Domain 또는 Entity로 칭한
- API 구현 개요 서비스 메서드 코드 구현 DTO 데이터를 옮기기 위해 사용하는 전달자 역할을 하는 객체이다. 별도의 비즈니스 로직을 포함하지 않는다. DAO 데이터베이스와 연결되고 데이터를 조회하고 수정하는데 사용하는 객체이기 때문에 데이터 수정과 관련된
서비스 메서드 구현 findAll()을 호출해 article 테이블에 저장되어 있는 모든 데이터를 조회 컨트롤러 메서드 구현 응답을 위한 DTO 작성 컨트롤러 메서드 작성 findAll() 메서드를 호출 후 응답용 객체인 ArticleResponse로 파싱
서비스 메서드 구현 findById() JPA에서 제공하는 메서드로, ID를 인자로 받아 엔티티를 조회하여 데이터를 반환한다. orElseThrow(Object o) Optional 클래스의 메서드 중 하나이다. 해당 메서드는 Null 값을 반환할 가능성이 있는 경
서비스 메서드 구현 블로그 글의 ID를 받은 뒤 JPA에서 제공하는 deleteById() 메서드를 사용해 데이터베이스에서 데이터를 삭제. 컨트롤러 메서드 구현하기 build(); 해당 객체를 빌드하여 완전한 HTTP 응답을 생성하는 한다. 별도의 헤더나 본문이
서비스 메서드 구현 엔티티에 요청 받은 내용으로 값을 수정한다. 블로그 글 수정 요청을 받을 DTO를 생성한다. @Transactional 데이터베이스 트랜잭션을 처리하기 위해 Spring에서 제공하는 기능 중 하나이고, 매칭한 메서드를 하나의 트랜잭션으로 묶는
타임리프 (Thymeleaf) 타임리프(Thymeleaf)는 서버 측 Java 템플릿 엔진이다. HTML, XML, JavaScript, CSS 및 일반 텍스트를 처리하는 데 사용되고, 주로 웹 애플리케이션의 뷰를 생성하는 데 이용된다. > 템플릿 엔진이란, 스프링
컨트롤러 메서드 구현 사용자에게 뷰를 보여주기 위한 뷰 컨트롤러를 구현한다. 뷰 컨트롤러 메소드는 뷰의 이름을 반환하고, 모델 객체에 값을 담는다. 뷰에게 데이터를 전달하기 위한 객체 생성 addAttribute() 모델에 "articles" 키에 블로그 글들의 리
엔티티에 생성 수정 시간 추가 @CreatedDate 엔티티가 생성될 때 생성시간을 created_at 컬럼에 저장한다. @LastModifiedDate 엔티티가 수정될 때 마지막으로 수정된 시간을 updated_at 컬럼에 저장한다. BlogApplica
삭제 기능 코드 작성 const deleteButton = document.getElementById('delete-btn'); id가 'delete-btn'인 요소를 찾아 deleteButton 변수에 할당한다. fetch() JavaScript에서 네트워크
수정/생성 뷰 컨트롤러 구현 Query Parameter (Query String) HTTP 요청에서 URL의 끝에 '?'로 시작하는 키 값으로 이루어진 문자열이며 '&'로 구분한다. 예를들어, ?id=123일 때에는 키는 id, 값은 123이 되는 것이다.
생성 기능 구현 클릭 이벤트 발생 시 id가 title, content인 입력 값을 추출하여 fetch 메서드를 통해 API로 /api/articles/POST 요청을 보낸다. 블로그 글 목록 뷰 수정 id가 create-btn인 글 등록 버튼(생성 버튼)을 추가
Spring Security 스프링 기반의 애플리케이션의 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 보안 관련 옵션들을 많이 제공하며, 애너테이션으로 쉽게 설정할 수 있다. CSRF 공격, 세션 고정 공격을 방어해주고, 요청 헤더도 보안처리
의존성 추가 엔티티 작성 테이블 구조 > id : BIGINT, NOT NULL, 기본키 - 일련번호, 기본키 email : VARCHAR(255), NOT NULL - 이메일 password : VARCHAR(255), NOT NULL - 패스워드 created_
Spring Security 설정 파일 작성 스프링 시큐리티 비활성화 - a configure 메서드는 WebSecurityCustomizer를 반환하며, 이는 Spring Security 구성을 사용자 정의하는 데 사용된다. H2 콘솔과 정적 리소스(static 하
서비스 메서드 구현 사용자 정보를 담는 dto 객체 생성 AddUserRequest 객페를 인수로 받아 데이터베이스에 저장한다. 패스워드를 저장할 때 시큐리티를 설정하며 패스워드 인코딩용으로 등록한 빈을 사용한다. 컨트롤러 구현 회원 가입 처리가 끝난 후 로그
뷰 컨트롤러 구현 로그인, 회원 가입 경로로 접근 시 뷰 파일을 연결해준다. 뷰 구현 로그인 뷰 구현 회원가입 뷰 구현 해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다. 신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주),
컨트롤러 구현 SecurityContextLogoutHandler() Spring Security에서 제공하는 로그아웃을 처리하는 핸들러이다. 해당 메서드는 현재 사용자의 인증 정보를 제거하고 세션을 무효화하는 역할을 한다. SecurityContextLogoutH
토큰 기반 인증 대표적인 사용자 인증 방법에는 서버 기반 인증 / 토큰 기반 인증 존재. 스프링 시큐리티는 기본적으로 제공하는 세션 기반인증을 사용하여 사용자마다 사용자의 정보를 담은 세션을 생성/저장하여 인증 한다. 토큰 기반 인증은 토큰을 사용하여 인증하는 방
의존성 추가 자바에서 JWT를 사용하기 위한 라이브러리를 추가하고 XML 문서와 자바 객체 간 매핑을 자동화 하는 jax-api를 추가한다. 토큰 제공자 추가 JWT 토큰을 발급하기 위한 이슈 발급자(issure), 비밀키(secret_key)를 필수로 설정해줘야
테스트 코드 작성 private Map claims = emptyMap(); Map은 키가 문자열이고 값이 임의의 객체인 Map을 나타낸다. emptyMap() 메서드는 빈 Map을 생성하여 반환한다. > Map은 Java에서 키-값 쌍을 저장하는 자료구조이다. 각
토큰 서비스 추가 리프레시 토큰을 전달 받아 토큰 제공자를 사용해 새로운 엑세스 토큰을 만드는 토큰 서비스 클래스를 생성한다. 전달받은 유저 ID로 유저를 검색해서 전달하는 findById() 메서드 추가 전달 받은 리프레시 토큰으로 리프레시 토큰 객체를 검색해서
OAuth ? 제 3의 서비스에 계정 관리를 맡기는 방식이다. ex. 네이버, 구글 로그인 연동 > - OAuth 용어 정리 리소스 오너 (resource owner) 자신의 정보를 사용하도록 인증 서버에 허가하는 주체이다. 서비스를 이용하는 사용자가 리
구글 로그인 기능 추가를 위한 토큰 발급 [구글 클라우드](https://cloud.google.com/free/?utmsource=google&utmmedium=cpc&utmcampaign=japac-KR-all-ko-dr-BKWS-all-cloud-trial-PH
의존성 추가 OAuth2를 사용하기 위해 build.gradle 파일에 의존성을 추가한다. 쿠키 관리 클래스 구현하기 쿠키 생성•삭제를 담당하는 쿠키 관리 클래스를 구현한다. addCookie() 요청값(이름, 값, 만료 기간)을 바탕으로 HTTP 응답에
글쓴이 추가 글에 글쓴이를 추가한다. 기존 글을 작성하는 API에서 작성자를 추가로 저장하기 위해 DTO 패키지의 AddArticleRequest의 toEntity() 메서드를 수정해 author 값도 추가하도록 변경한다. service 패키지의 BlogServic
OAuth 뷰 구성 OAuth 구현의 마지막 단계인 OAuth 뷰를 구성한다. UserViewController 수정 로그인 뷰를 oauthLogin으로 변경한다. 로그인 이미지 다운 로그인 화면에서 사용할 이미지를 다음 구글 로그인 브랜드 사이트에서 다운로드 받는
글 수정, 삭제, 글쓴이 확인 로직 추가하기 글을 수정하거나 삭제할 때 요청 헤더에 토큰을 전달하므로 사용자 자신이 작성한 글인지 검증할 수 있다. 따라서 본인 글이 아닌 글을 수정, 삭제를 시도하는 경우, 예외를 발생시킬 수 있도록 코드를 수정한다. 수정 및 삭제
OAuth2 실행 테스트 http://localhost:8080/login에 접속하여 [구글로 로그인하기] 버튼을 클릭하여 OAuth2를 이용해 로그인을 한다. 로그인 완료 시 /articles로 리다이렉트되며, 쿼리 파라미터에 token, 엑세스 토큰을 요청 헤더로
기존에 작성한 BlogApiContorollerTest의 테스트 코드에 10장 OAuth2 인증 관련 로직을 추가 구현한 부분을 고려하여 테스트 코드를 재작성한다.setSecurityContext()userRepository.deleteAll()테스트용으로 사용되는 u
AWS로 서비스 배포 AWS 서비스 구성 EC2 : AWS에서 제공하는 원격 서버 오토 스케일링 그룹 타깃 그룹 로드 밸런서 RDS : AWS에서 제공하는 원격 데이터베이스 AWS 구성도 > 출처 :
현재 위치와 가장 가까운 리전으로 설정해준다.검색창에 Elastic Beansrtalk를 검색해 일래스틱 빈스토크 서비스로 들어가 Create Application 버튼을 눌러 서비스를 생성한다.애플리케이션 이름 입력 후, 플랫폼을 Java, 플랫폼 브랜치를 Corr
애플리케이션 배포하기 인텔리제이를 실행해 [Gradle] 탭을 누른 다음 [Tasks->build->build]를 더블클릭해 빌드를 진행한다. > 위와 같은 오류가 발생하였다. 위 오류는 Gradle이 MySQL 커넥터 자바 라이브러리를 찾지 못하여 발생한 것이라고
CI/CD란? > 출처 : https://www.hanl.tech/blog/ci-cd-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90%EA%B3%BC-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%B4-%EC%93%B0%EC%9D%B
깃허브 액션 깃허브에서 제공하는 CI/CD 서비스이다. 해당 서비스를 이용하여 코드를 자동으로 빌드하고 테스트하고 배포할 수 있다. 깃허브 저장소의 특정 이벤트에 대한 반응으로 실행되는 작업 단위는 액션이라 칭한다. 예를 들어, 리포지토리에 코드가 푸시될 때마다 빌드
build.gradle 수정 빌드 시 플레인 아카이브(plain archive) 파일은 생성되지 않도록 설정 프로젝트 빌드 시 jar 파일이 2개가 생기는데, 이 중 pain이 붙은 jar 파일은 프로젝트 실행 시 필요한 의존성들이 포함되지 않은 순수 소스 코드
데이터 유효성 검사 (Validation) 사용자가 잘못 입력한 데이터를 서버에서 처리하기 전에 입력 데이터를 검사하는 행위를 의미한다. 보통 데이터 유효성 검사 후 데이터가 유효하지 않다면, 사용자에게 에러 메시지를 보여주게 된다. 프론트엔드 부분에서도 데이터 유효성
Severe 상태 발견 여느때와 같이 비용 관리가 잘 되고 있나 AWS에 접속하면서 서비스들이 제대로 동작을 하고 있나 확인해보고 있었다. 얼마전 AWS Elastic Beanstalk에 배포해놓은 블로그 서비스도 잘 동작하고 있나 상태를 확인해보았지만, 며칠 전까지만
내 서버를 몰래 훔쳐보던 사용자의 IP의 접속을 차단하기로 하였다. 물론 임시적인 해결방안이지만, WAF를 구축하기 전까지는 해당 IP의 접속을 막는 것이 최선이라고 생각했다. 일단 급한 불을 먼저 꺼보기로 하자. NACL (Network Access Control
AWS Elastic Beanstalk에 배포해놓은 블로그 서비스에 해킹의 시도가 발견되었는데, 이에 대한 후속 조치로 1차적으로 HTTPS 보안 통신을 구현해야겠다고 생각하여 ACM을 이용하여 HTTPS를 구현해보고자 한다. 일단, 제일 기본적인 HTTPS 통신을 이