👩🏻‍💻 Programming 88

@SpringBootTest, @AutoConfogureMockMvc, 그리고 @WebMvcTest

JUnit과 단위테스트 SpringBoot에서 JUnit를 사용하여 테스트 코드를 작성할때, 대표적으로 @SpringBootTest와 @WebMvcTest를 사용하는 경우가 많다. 처음에는 둘의 차이를 간단하게 @SpringBootTest는 모든 빈을 가져와서 속도가 느리고 @WebMvcTest는 필요한 빈만 가져와서 속도가 빠르다 정도로 이해를 했지만, 정확히 개념을 이해하지 못하고 사용한 탓에 테스트 케이스 작성 실패를 겪은적이 있었다. 내가 쓴 테스트 케이스가 어떤 상황에서, 무엇을 목적으로 돌아가는 테스트 케이스인지를 보다 정확히 이해하기 위해 개념을 정리한다. @SpringBootTest + @AutoConfigureMockMvc 1) 특징 - 프로젝트 내부에 있는 스프링 빈을 모두 등록하여 테..

Curl 개념 및 사용법

Curl 이란? CURL = Client URL 서버와 통신할 수 있는 커맨드 명령이 툴로, 웹개발에 많이 사용되는 무료 오픈소스다. Curl을 사용함으로써 패킷 / 메세지를 네트워크로 전송이 가능하며, HTTP/S로 GET,POST등으로 데이터를 전송할 수 있다. Curl 설치 방법 우분투 Command 설치 : apt-get install curl 플랫폼 별 바이너리 다운로드 경로 ( Linux, Window, MacOS 등) : https://curl.haxx.se/download.html curl - Download curl.se Curl 활용- 예시 예를 들어 JUnit으로 테스트를 할때, 아래와 같이 한글이 깨져서 발생하는 경우가 있다. 이때 (macOS기준) terminal, (window기..

스프링 기본 정리 - 객체지향 원리 적용

프레임워크 vs 라이브러리 프레임워크 : 내가 작성한 코드를 제어하고 대신 실행해주면 프레임워크에 해당 (ex : JUnit) 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리에 해당 (ex : Java 객체 -> Json으로 바꾸는 라이브러리) 스프링으로 관리되는 예제 코드 @Configuration // 설정정보 (ex : 이게 설정파일임을 알리며, Bean을 등록한다는것을 의미함) public class AppConfig { @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepositor..

Git blame 사용법

Git blame 이란? Intellij 내부의 Git > Current File > Annotate with Git Blame을 클릭하면 사용할 수 있다. Git blame을 통해 Git에 Commit이 되어 수정된 파일들의 내역을 볼 수 있다. 팀원들과 협력하여 다른 사람의 코드를 읽다보면 가끔 예전 파일의 기록이 필요할때도 있는데, 그럴때 Git Blame을 잘 활용하면 된다. 사용 예시 git blame을 클릭하면 해당 파일에서 모든 줄마다 변경된 이력들이 나온다. 변경된 이력을 클릭해서 보면 해당 commit이 이루어진 파일과 현재의 변경된 코드를 비교해서 보여준다. 그렇게 변경된 파일의 비교사항을 보면, 위쪽에 위와같이 랜덤 난수로 선언된 코드를 볼 수 있다. 해당 난수 코드를 팀원들과 협력하..

ArrayList 인터페이스를 구현한 클래스 활용

개요 1. 유저의 ID와 Name이 저장된 Member 객체를 구현한다. 2. Member 객체를 저장할 ArrayList를 구현한다. 3. Member 객체를 저장하여 특정 유저는 제거한 뒤, 남아있는 객체들의 정보를 출력한다. 코드 구성 Member : 멤버 정보를 저장할 객체 MemberArrayList : 멤버 정보를 ArrayList로 저장할 클래스 MemberArrayListTest : 멤버 정보를 저장하고 출력할 main 클래스 코드 예제 [ Member ] package ch10; public class Member { private int memberId; private String memberName; public Member(int memberId, String memberName) ..

Generic 메소드 활용

Generic 메소드의 활용 1. 두 점을 입력받아 한 점을 왼쪽위 모서리, 다른 한쪽을 오른쪽아래 모서리로 지정한다. 2. 사각형의 넓이를 double 형으로 계산하여 출력한다. 단, 입력되는 모서리의 값은 Integer일수도 있고, double일수도 있다. 코드 구성 GenericMethod : 두 점을 통해 사각형의 넓이를 구해 출력할 main 클래스 Point : 두 점을 저장할 제네릭 클래스 사각형의 넓이를 구하는 코드 예제 [ Point ] package ch07; public class Point { T x; V y; Point(T x, V y){ this.x = x; this.y = y; } public T getX(){ return x; } public V getY(){ return y;..

Generic과 상속 (T extends)

Generic 이란 간단하게 요약하면 클래스 내부에 지정하는 것이 아닌, 외부 사용자에 의해 지정되는 것을 의미한다. 예를 들어 Class 타입과 Interface 타입에 Generic을 지정하면 아래와 같다. [ Class 타입 ] class ClassGenericType { private T t; public void set(T t) { this.t = t; } public T get() { return t; } } [ Interface 타입 ] interface InterfaceGenericType { T1 doSomething(T2 t); T2 doSomething2(T1 t); } 이제 외부에서 해당 Class와 Interface 타입에 String을 넣느냐, Intenger를 넣느냐에 따라 타..

SpringBoot에서 Naver API 연동하기

주제 네이버 API를 연동하여 localhost에서 원하는 음식을 파는 지역의 정보를 출력해보자. Naver API 선택 및 이해 1. 먼저 아래 링크로 접속하여 사용하고자 하는 네이버 API를 선택한다. 지역 - Search API 지역 NAVER Developers - 검색 API 지역 검색 개발가이드 검색 > 지역 네이버 지역 서비스에 등록된 각 지역별 업체 및 상호 검색 결과를 출력해주는 REST API입니다. 비로그인 오픈 API이므로 GET으로 호출 developers.naver.com 내 경우에는 지역 API를 선택했다. 2. API 생성을 신청한다. 어플리케이션 이름은 마음대로 적고, 사용 API의 경우 기본적으로 본인이 선택한 항목이 지정되어있을테니 굳이 건들일 필요는 없다. 비로그인 오..

Spring Boot와 Exception 처리

Exception 처리란? Spring Boot에서 에러가 발생할 경우 보통은 White Label 페이지를 보여준다. 추가적으로 400, 404와 같은 에러코드를 보여주는데, 이것만으로는 어디서 어떤 문제가 발생했는지 파악하는데 충분하지 않을 수 있다. 때문에 Web Application 입장에서는 이러한 에러를 한 곳에서 + 어디서 무슨 문제가 발생했는지 알려주면 보다 쉽게 에러를 처리할 수 있다. 대표적으로 Spring Boot에서 제공하는 Exception 처리 Annotation은 아래와 같다. @ControllerAdvice (@RestControllerAdvice) Global 예외 처리 및 특정 Package / Controller 예외 처리 * REST API를 사용한다면 RestCont..

DNS 매핑 및 웹 서버 연동

DNS & HOST DNS는 도메인 네임 시스템, 즉, 도메인 이름을 뜻한다. 예를들어 네이버는 www.naver.com이 DNS이다. IP를 기억하기 쉽게 하기 위해 사람에게 친숙한 영단어로 도메인 네임을 구축한다. (DNS) www.naver.com -> (IP) 220.95.233.172 HOST는 쉽게 말하면 컴퓨터 한 대를 뜻하는데, 예를들어 스케일 아웃 방식으로 여러대의 서버를 구축하고 업로드 API를 10개 구축했을때, 업로드 API 01, 02, 03 ... 이런식으로 운영이 될 것이다. 이때 IP만으로 여러개의 API를 관리하면 번거로우므로, HOST도 같이 활용하는 것이다. test1.api.org test2.api.org test3.api.org ... DMZ Zone 내부에서는 이렇..