본문 바로가기

전체 글

(104)
SpringBoot로 JSON 응답 보내는 방법 (GSON JsonObject, @ResponseBody, @RestController) 안녕하세요! 이번에는 Spring Boot에서 JSON 형태로 return을 해주는 방법에 대해 알아보겠습니다. 정말 간단하기 때문에 쉽게 따라오실 수 있습니다! 💃 준비 - DTO 만들기 예시를 보여주기 위해 간단한 DTO를 만들어줍니다. @Setter @Getter public class Blog { private String title; private String content; } 👀 어노테이션 사용하기 컨트롤러 단에서 JSON 객체를 문자열로 간편하게 직렬화 할 수 있게 도와주는 두 어노테이션을 소개합니다. @RestController 데이터를 전송하기 위한 컨트롤러로 사용하며,@RestController를 사용하면 기본으로 하위에 있는 메소드들은 모두 @ResponseBody를 가지게 됩니다...
SpringBoot와 Thymeleaf를 이용하여 페이징하기 안녕하세요. SpringBoot로 만든 게시판 소스에 Thymeleaf를 사용하여 페이징 기능을 추가해보겠습니다. 목록을 가져오는 서비스 메소드 구현 먼저, 목록을 가져오는 서비스 메소드를 구현해보도록 하겠습니다. Service /** * 방명록을 모두 가져오는 메소드 * @param startAt 현재 가져온 페이지 * @return */ @Override public Page findAllPage(int startAt) { Pageable pageable = PageRequest.of(startAt, 10); return guestBookRepository.findAll(pageable); } startAt은 현재 페이지를 말합니다. 주소창에서 파라미터로 가져온 후 넘겨줍니다. (좀 이따 컨트롤러에서..
[Spring Boot] @IdClass로 복합키 매핑을 했을 때 생기는 오류 해결 방법 (DB 컬럼명과와 엔티티 변수명이 다를 때) 먼저 아래 내용을 체크해야 한다. 엔티티 클래스와 식별자 클래스의 자료형과 변수명이 같은가? 식별자 클래스는 Serializable을 구현하고 있는가? 식별자 클래스의 접근 제어자가 public인가? User.java @Entity @Getter @Setter @Table(name = "users") @IdClass(UserId.class) public class User implements Serializable { /** * 회원 번호 (Unique, Auto Increment) */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "seq") private Long id; /** * 아이디 (Unique) */ @Id p..
Spring Boot Map Struct Gradle 사용해보기 Map Struct? Map Struct란 자바 빈의 매핑(Entity - DAO)을 쉽게 하도록 도와주는 프래임워크 자세한 설명은 아래 링크를 참고해주세요! (공식 사이트) MapStruct - Java bean mappings, the easy way! MapStruct – Java bean mappings, the easy way! Java bean mappings, the easy way! Get started Download mapstruct.org Gradle 환경에서 Map Struct을 사용한 Spring Boot 예제 Map Struct를 사용하면서 삽질을 많이 했기 때문에, 다른 분들은 저 같은 삽질은 하지 않았으면 좋겠는 마음으로 예제를 만들었습니다! 예제를 작성하다보니 본의아니게 예..
Spring Boot Validation을 사용하여 요청 값 검증하기 전체 코드는 Github에서 확인이 가능합니다. Bean Validation 도메인 로직에서 값을 검증할 수 있게 도와주는 인터페이스이다. (참고:Java와 Spring의 Validaiton) 주요 어노테이션들은 아래와 같다. /** * 직접 검증을 하고 싶을 때 사용 */ @AssertTrue @AssertFalse /** * 문자열을 다룰 때 사용 */ @NotNull // null 불가능 @NotEmpty // null, 빈 문자열(스페이스 포함X) 불가 @NotBlank // null, 빈 문자열, 스페이스만 포함한 문자열 불가 @Size(min=?, max=?) // 최소 길이, 최대 길이 제한 @Null // null만 가능 ​ /** * 숫자를 다룰 때 사용 */ @Positive // 양수..
DAO, DTO 차이점 개발을 하다가 DAO, DTO의 개념이 헷갈려서 정리를 하게 되었다. DAO(Data Access Object)란? - 실제로 데이터베이스에 접근을 하기 위해 생성하는 객체 DTO(Data Transfer Object)란? - 데이터 교환을 위해 사용하는 객체 - DB의 데이터를 Controller 혹은 Service로 보낼 때 사용 - getter, setter를 가지고 있는다. - DTO vs VO - VO는 DTO와 비슷하지만, 수정할 수 없다. ( getter만 있는 것이라고 생각하면 됨)
Github & IntelliJ로 프로젝트 관리하기 (이슈 만들기, 브랜치 생성, PR날리기) Outline Github와 IntelliJ를 사용하며 프로젝트를 관리하던 와중, 이 플로우를 블로그에 기록하고 공유하면 좋을 것 같다는 생각이 들어 작성하게 되었습니다. 틀린 내용이 있다면 댓글로 정정해주신다면 감사하겠습니다! Contents Issue Template 만들기(최초) Issue 만들기 Task 생성 (Branch 만들기) 코드 작업 PR(Pull Request) 날리기 Issue 닫기 Flow 1. Issue Template 만들기 프로젝트 단위로 최초로 한 번만 실행하면 되며, 따로 게시글로 정리해놓았습니다. 깃허브 이슈 템플릿 만들기 2. Issue 만들기 생성한 Issue Template를 활용하여 이슈를 새로 만듭니다. 이슈는 이슈 번호로 구분합니다. 저 같은 경우에는 이미 이슈..
OSI 7계층과 TCP/IP 4계층 1. OSI 7계층의 정의 1-1. OSI 7계층이란? 네트워크를 이루고 있는 구성요소들을 7단계의 계층적 방법으로 나누고, 각 계층의 표준을 정한 것이다. 1-2. OSI 7계층이 생긴 이유 시스템 간의 통신을 개방하기 위해서 (OSI 7계층이 생기기 이전에는 표준이 존재하지 않아 각양각색으로 개발을 했기 때문에 데이터 전송이 어려웠음) 2. OSI 7계층과 TCP/IP 4계층 2-1. OSI 7계층 일반적인 네트워크를 포괄하는 네트워크 모델로, 수행 기능에 따라 물리 계층(1계층), 데이터 링크 계층(2계층), 네트워크 계층(3계층), 전송 계층(4계층), 세션 계층(5계층), 표현 계층(6계층), 응용프로그램 계층(7계층)으로 나뉜다. 2-2. TCP/IP 4계층 TCP/IP 프로토콜을 사용하는데 ..