Dev 125

[Next Step] 자바 웹프로그래밍 2.3 정리

요구사항 전달하는 문자를 구분자로 분리하자 각 숫자의 합을 구해 반환하자 쉼표(,) 또는 클론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환하 커스텀 구분자를 지정하자 "//", "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용하자 문자열 계산기에 음수를 전달하는 경우 RuntimeException으로 예외처리하자 요구사항을 더 작은 단위로 쪼개보자 개발자의 역량을 키우기에 좋은 연습이다 String 클래스를 활용하자 2.3.2를 보기 전 내가 구현한 테스트 코드 및 구현 코드 알고리즘이랑 유사하다고 느꼈다. 상당히 자세하고 요구사항이 쪼개지며, 예외에 대한 테스트도 꼼꼼히 작성하게 되는 느낌이었다. 음수가 있으면 예외처리를 던지는 로직을 추가하였다. 테..

Dev 2022.08.24

[Next Step] 자바 웹프로그래밍 2.1,2.2 정리

2.1 main() 메소드를 활용한 테스트의 문제점, 2.2 Junit을 활용해 main() 메소드 문제점 극복을 정리해보았습니다. 학습 목표 문제점과 해결방식에 초점을 맞추어 정리했습니다. 문제점이 무엇인지 아는 상태에 도달하기 위해 노력했습니다. 1. 프로덕션 코드와 테스트코드(main()) 이 같은 클래스에 위치하고 있다. public class Calculator{ ... } public static void main(String[] args){ Calculator cal = new Calculator(); cal.add(1,2); cal.sub(1,2); } 프로덕션 코드와 테스트 코드를 분리하자 public class Calculator{ ... } 분리! public static void m..

Dev 2022.08.22

[Spring Boot] Controller에서 매개변수 넘겨받기

controller단에서 매개변수를 넘겨받는 방법을 한번 정리하고 넘어가고 싶어 포스팅을 남기게 되었다. 1. /test/{id} 로 넘겨받고 싶은 경우 - @PathVariable /* /test/{id} */ @GetMapping("/test/{id}") public String testControllerWithPathVariables(@PathVariable(required = false) int id){ return "hello id : " + id; } 2. /test?id=123으로 넘겨받고 싶은 경우 - @RequestParam /* /test/testRequestParam?id=123 */ @GetMapping("/test/testRequestParam") public String test..

Dev/SpringBoot 2022.07.18

Restful 하다는 것은 뭘까?

REST - Representational State Transfer의 약자로, 아키텍쳐 스타일이다. - 아키텍쳐 스타일 : 반복되는 아키텍쳐 디자인 - 아키텍쳐 패턴 : 어떤 반복되는 문제 상황을 해결하는 도구 - 6가지 제약조건으로 구성되며, 이 가이드라인을 따르는 API를 RESTful API라고 한다. REST 제약조건 - 클라이언트-서버 - 상태가 없음 - 캐시되는 데이터 - 일관적인 인터페이스 - 레이어 시스템 - 코드-온-디멘드(Optional) 1. 클라이언트-서버 - 리소스 : REST API가 리턴할 수 있는 모든 것을 의미. 예를들어 HTML, JSON, 이미지 등이 있다. - 리소스를 관리하는 서버가 존재하고, 다수의 클라이언트가 리소스를 소비하려고 네트워크를 통해 서버에 접근하는 ..

Dev 2022.07.18

[Spring] 의존성 주입(DI)에 대해 알아보자 - 3 / 의존성 주입

[Spring] 의존성 주입(DI)에 대해 알아보자 - 1 / 개요, Bean 정의 [Spring] 의존성 주입(DI)에 대해 알아보자 - 2 / Bean 설정 의존성 주입 의존성 주입에는 3가지 방법이 있다. . 설정자 기반 의존성 주입 방법 . 생성자 기반 의존성 주입 방법 . 필드 기반 의존성 주입 방법 설정자 기반 의존성 주입 방법 == 세터 인젝션 . 세터 메서드(setXXXX())를 이용해 의존성을 주입하는 방법이다. . 아래와 같은 클래스가 있다고 하고, userService를 구현해보자. // userService를 구현해보자. public class UserServiceImpl implements UserService{ private UserRepository userRepository;..

Dev 2022.03.03

[Spring] 의존성 주입(DI) 에 대해 알아보자 - 2 / Bean 설정

[Spring] 의존성 주입(DI)에 대해 알아보자 - 1 / 개요, Bean 정의 빈 설정하는 방법 . 이전 글 뒷부분을 살짝 가져왔다. . 위의 클래스 AppConfig처럼 빈을 설정하는 방법에도 3가지가 존재한다. . 빈 설정 방식 3가지는 아래와 같다. . ApplicationContext는 단독 앱에서 스프링 프레임워크를 사용하거나, JUnit으로 만든 테스트 케이스 안에서 스프링 프레임워크를 구동할 때 사용된다. . 웹 앱 사용 시, 확장된 개념인 WebApplicationContext를 이용한다. 자바 기반 설정 방식 방법 설명 생성 방식 자바 기반 설정 방식 . 자바 클래스에 @Configuration 어노테이션을 사용하고, 메서드에 @Bean 어노테이션을 사용해서 빈을 정의한다. . 스프..

Dev 2022.03.02

[Spring] 의존성 주입(DI) 에 대해 알아보자 - 1 / 개요, Bean 정의

의존성 주입(DI)이 필요하게 된 배경 . 앤터프라이즈 애플리케이션 개발 시, 하나의 처리를 수행하기 위해 여러 개의 컴포넌트를 조합해서 개발하는 경우가 일반적이다. . '공통으로 사용되는 기능을 따로 분리한 컴포넌트', 'DB 접근을 위한 컴포넌트', '외부 시스템에 접속하기 위한 컴포넌트' 등이 있다. . 하나의 처리를 구현하기 위해 여러 컴포넌트를 통합할 때 의존성 주입이 필요하다. . 예를 들어, UserService의 Save 기능을 구현하기 위해서는 UserRepository나 PasswordEncoder클래스를 이용해서 구현해야 한다. 클래스 간 결합도가 높다 . 위에서 말했듯 UserServiceImpl 클래스를 개발하는 단계에서는 이미 UserRepository나 PasswordEncod..

Dev 2022.02.28

JPA 사용해서 무한 계층 댓글 구현해보기 - 02

이전 포스팅 JPA 사용해서 무한 계층 댓글 구현해보기 (infinite depth) - 01 페이스북에서 보던 무한댓글(댓글의 댓글의 댓글의...) 은 어떻게 구현되는지 궁굼해서 이것저것 알아보다가 우연히 좋은 포스팅을 발견해서, 공부하고 응용해보는 작업을 해보려 한다. 1. 요구 dkyou.tistory.com 이전 포스팅에 이어 엔티티 개발을 시작해보자 3. 엔티티 개발 JPA를 까먹고 추가안했어서 추가해주었다. import lombok.*; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @EqualsAnd..

Dev/SpringBoot 2022.01.20

JPA 사용해서 무한 계층 댓글 구현해보기 - 01

페이스북에서 보던 무한댓글(댓글의 댓글의 댓글의...) 은 어떻게 구현되는지 궁굼해서 이것저것 알아보다가 우연히 좋은 포스팅을 발견해서, 공부하고 응용해보는 작업을 해보려 한다. 1. 요구조건 및 개발 사항 정리 1. 엔티티 개발 하나의 테이블만 이용하여 구현 예정 self join 사용하여 무한 뎁스 구현 level 필드를 구현하여 depth에 따라 level별 분류하도록 구현 2. 리포지토리 개발 JpaRepository 사용하여 구현 3. DTO 개발 Entity는 순수하게 DB를 생성하고 DB하고만 소통하게 하기 위해 DTO구현 DTO는 비지니스 로직에서 사용하기 위해 구현 Entity에서 list로 담은 children을 DTO로 변환 구현 (stream, Collectors 사용) 4. 서비스..

Dev/SpringBoot 2022.01.20