여러 사유로 공부하는 것을 지체했다. 이제 시작하려는 공부는 학습하지 않았던 백엔드 프로그래밍을 다시 공부하려고 한다. 부족한 실력을 보충하려면 부단히 노력해야 할 것이다. 학습 도구 : JAVA, Spring, SpringBoot 현행 백엔드 개발자의 기술스택으

근 한 달만에 작성하는데, 정처기 공부를 병행하고 있어서 글 작성을 잊고 있었다.현재까지 제대로된 실습 프로젝트를 들어가지는 않았으나, API를 작성하는 방법이나 API를 활용할 수 있는 방법을 간단히 익히고 있었다.현시점에서는 REST API를 이용한 간단한 CRUD

GET 방식의 요청에 이어 POST 방식의 요청을 다룬다.HTTP 헤더에 많은 내용이 들어가는 것은 데이터를 공개하는 것과 다름이 없기 때문에 body 부분에 정보를 담아 암호화할 수 있어야 한다.이같이 작성하게 되면 localhost:8080/api/post에 요청되

데이터 갱신과 생성에 해당하는 PUT 요청을 알아본다.PUT 메소드는 POST 메소드와 매우 흡사하나,데이터가 존재하면, 갱신하는 기능을 한다. CRUD의 C,U를 다룰 수 있는 메소드이다.단, 실행될 때마다 데이터가 변경되기 때문에 안정성은 지켜지지 않으나, 중복 데

마지막은 DELETE 메소드인데,리소스 삭제에 해당하는 delete는 CRUD에서 D을 담당하고 GET 메소드와 유사하게 databody를 가지지 않는다.데이터를 변경시키므로 안정성은 지켜지지 않으나, 여러번 삭제해도 삭제된 데이터를 또 삭제할 수는 없으므로 멱등성은

매우 오랜만이다.손가락 골절 덕분에 키보드를 한 손으로 조작하기가 쉽지가 않았다.Spring Boot에서 제공하는 Jackson의 Object Mapper를 보겠다.클래스의 멤버를 확인하거나 parsing하는데 조작이 필요한 경우가 존재한다.dto를 json으로 직렬화

예측한 예외처리와 예측하지 못한 예외처리를 알아본다.일부러 예외를 발생시켜보고 GET요청을 보내보자로그에도 같은 예외가 발생했다.BODY를 보면 Json으로 내려오는 것을 볼 수 있다.하지만 광범위한 코드의 예외를 하나하나 처리하는 것은 매우 비효율적이기 때문에 글로벌

만약 user id를 주소에 포함한 상태로 response를 요청하고 싶고(그런 일은 없겠지만)PathVariable이나 QueryParam 등으로 user의 id가 입력됐다고 가정하자.userId는 userList에 존재하는 id를 찾아서 매핑을 시도할 것이다.use

하나의 Exception Handler에서 Exception 클래스를 Handling하는 경우Global Controller의 예외처리가 부족할 수 있다.주로 한 비즈니스 로직에서 발생하는 ErrorCode는 Enum Class로 분류해놓는 경우가 많은데,공통 모듈에서
우리는 유저의 입력을 검증할 필요가 있다.정규식을 이용한다던가, 간단히 조건문을 이용할 수 있겠다.하지만 이번에는 비즈니스 로직과 Validation 파트를 분리해서 보겠다.Inner Class를 이용해서 입력한 정보의 에러를 표시하도록 했다.처음 보는 어노테이션은 @
전화번호 입력 검증을 했었는데, 정규식을 외우고 있을 수는 없지 않을까 ?우리나라 전화번호는 000-0000-0000으로 다 같을테니까 어노테이션을 만들어보자.ConstraintValidator는 데이터 혹은 클래스의 검증 시점을 비즈니스로직 수행 전, 즉 contro

전화번호를 검증하는 것을 진행했었는데, 날짜 입력도 검증해보자기존의 PhoneNumber와 다른 것은 검증하는 로직이 조금 길어졌다는 것이다.날짜 입력은 터무니없는 값이 입력될 수 있기 때문에 입력 값을 파싱해 LocalDate값과 비교한다.val과 pat은 위 설명과

DB를 배우는 데에 진입한다.역시 처음 배울 내용은 CRUD이다.Create, Read, Update, Delete의 약자로 소프트웨어 혹은 데이터베이스에서 기본으로 가지는 기능이다.다른 이름을 가지고 CRUD의 기능을 하는 소프트웨어나 프로토콜이 존재한다.매우 기본적
메소드 구현체를 만들어 놓은 것으로 CRUD를 적용해보자전체 데이터의 Entity를 가지고 있는 user를 만들어야 하니 유저가 가질 UserEntity가 필요하다.유저가 가지는 DTO를 선언하고 이를 관리할 저장공간을 정의한다.이는 SimpleDataRepositor
스프링 컨테이너는 객체를 생성하고 관리한다. 애플리케이션에서 불필요하게 길어지는 코드를 줄여주고간단하게 의존성을 주입해주는 역할을 한다.Lombok에서 제공하는 어노테이션으로 final로 선언된 필드나 NonNull이 붙은 필드의 생성자를 생성해준다.전통적인 방법으로
SQL SQL은 'Structured Query Language'로 데이터베이스에서 데이터를 다루는데 사용되는 언어이다. 대부분의 데이터베이스 시스템에서 SQL 언어를 지원한다. 오라클에서 제공하는 OracleDB, MySQL이나 MS에서 제공하는 MSSQL 등 여러

CREATE는 말그대로 생성이다.테이블을 생성할 때 사용되는 명령어이다.등의 코드로 입력 가능하다.주의할 것은 테이블과 컬럼, 로우는 작은 따옴표 ( ' )가 아니라 ESC 밑에 있는 그것, ( \` )으로 사용한다.(하지만 DEFAULT나 COMMENT의 문자열은 작

JDBC(Java DataBase Connectivity)는 Java기반 어플이케이션 데이터베이스 관리를 Java에서 사용할 수 있도록 하는 API이다.JDBC는 많은 DBMS에 사용 가능하도록 Low Level의 인터페이스로 사용할 DBMS의 드라이버와 DB의 URL
Database 파트에서 작성했던 Memory 기반 Database 코드를 JPA 코드로 옮겨보자Spring Data JPA와 mysql connector dependency를 주입해줘야 한다.yaml 파일도 작성해서 데이터베이스와 연동해야한다.기존 코드에서 레포지터리

Quert는 데이터베이스에 특정 정보를 요청하는 것이다.질의라고도 하며 정보를 검색하기 위한 작성문이다.쿼리를 작성하기 위해서는 SQL이라는 언어를 학습해야하고, 생각보다 새로 익히기 쉽지 않은 구조로 이루어져있다.JPA에서는 Query Method를 사용해서 JpaR

기본적인 게시판을 개발해보자.프로젝트의 개발 프로세스가 정해진 규격은 없지만, 무턱대로 서비스 로직을 작성하지는 않을 것이다.시스템 전체의 설계를 진행하고, 데이터베이스를 설계하는 것이 가장 우선이다.우리는 비회원 게시판을 개발할 예정이고, 기본 레이아웃은 다음과 같다
End Point 게시판의 CRUD를 위해 End Point를 개발해보자. 클라이언트가 서버와 통신하고자 하는 URL 경로로 해당 포스트에서는 CRUD 기능을 제공하기 위해 응답 요청을 구현하는 것으로 한다. board 테이블에 추가할 것은 게시판 이름 뿐이므로 r
Recursion Loop 이 전 코드에서는 Entity를 방문하는 과정에서 BoardEntity 클래스의 postList를
Controller에서 Entity를 참조하는 것이 바람직하지 않다는 것을 이전 포스팅에서 말한 바 있다.그래서 DTO를 통해 Converter로만 데이터를 조작할 수 있도록 만들었다.Controller에서 BoardEntity를 내리는게 아니라 BoardDTO를 내리

사용자가 게시판의 글을 열람하기 위해 게시판을 요청할 때만약 게시글이 10개가 한 페이지에 존재한다면, 한 번에 다 볼 수 있다.만약 게시글이 100만개가 한 페이지에 존재한다면, 한 번에 다는 커녕 페이지 로드 속도가 매우 느릴 수도 있다.매번 요청할 때마다 게시글

스프링에서는 Request를 핸들링하기 전 필터링을 거친다.입력 혹은 출력에 대한 예외나 오류를 확인하는 경우로클라이언트가 잘못 입력하거나 서버의 로직이 잘못된 경우와 같은 상황의 로그를 확인하기 위함이다.body를 가져오는 POST 요청이 있다고 해보자.네 가지의 필

Filter를 이야기할 때 Request를 핸들링하기 전이라는 말을 했다.interceptor는 핸들링하기 전 요청과 응답을 "낚아챈다"는 의미일 것이다.Controller에서 핸들링하기 전에 데이터를 가공하거나 참조해서 어떤 작업을 하고자할 때 사용한다.스프링에서 제

Aspect Oriented Programming이란 관점(Aspect)에 따라서 기능을 분리하는 프로그래밍 기법이다.OOP(Object Oriented Programming)와 반대되는 개념인 것 같지만, 부족한 면을 보완하기 위해서 만들어졌다.목적과 기능에 따라 클
@PointCut 지시자를 통해서 @PointCut 어노테이션의 Aspect를 적용할 위치를 지정할 수 있다. "PCD"라고 부를 수 있다. >|지시자|기준| |---|---| |execution|리턴타입, 타입, 클래스, 패키지, 메소드, 파라미터 기준| |withi
추상화는 객체지향 프로그래밍의 개념으로 기존 클래스의 공통적 요소, 기능을 추출해서 불필요한 부분을 생략하거나 중요한 부분을 중점으로 개략적으로 구성한 것이다.프로그래밍에서는 인터페이스와 추상 클래스를 통해서 객체 행동을 정의하는 것으로 설명할 수 있겠다.추상 클래스는

이전 포스팅에서 CRUD 기능을 추상화해서 재사용 가능한 코드를 생성했다.Reply 테이블의 CRUD를 추상화 코드로 변경해보자.매우 짧아졌다.JpaRepository를 상속받는 Repository처럼 각 Reply의 클래스는 상속받는 추상클래스의 구현체를 자동으로 사
Authentication 인증은 클라이언트가 "누구"인지 확인하는 과정이다. 기본적으로 ID와 패스워드, 혹은 사용자의 정보를 이용해 인증을 거친다. Authoraization 인가는 그 "누가" 접근하고자 하는 작업의 리소스 혹은 서비스를 제공해도 되는지를 판단한

Json객체를 사용해 정보를 안전하게 전달할 수 있도록 설계된 토큰 기반 인증 방식이다.Authentication & Authorization을 학습중이며 웹 보안 관련한 중요 표준이 등장했다.JWT는 URL, HTTP Header, HTTP Form과 같은 방식 등으

JWT 토큰을 io로 생성해보았으니 직접 코드로 생성해보자Service 레이어에서 들어갈 정보를 포함하는 토큰을 생성하는 메소드와 이를 검증할 수 있는 메소드를 작성한다.claims는 여러 데이터가 들어갈 수 있는 Map으로 이전 포스트에서 작성했던 여러 정보가 포함된