프로젝트 구조 설명 configuration 패키지 생성. - response 구조를 커스텀할 클래스들 생성. 1. RestResponse : 200 코드를 반환할 때 사용 2. ErrorResponse : 에러 발생시 사용 configuration.aspect 패키지 - RestControllerAspect 클래스 : RestController 역할의 클래스를 감싸는 역할. - ServiceExceptionAspect : 서비스 로직에서 발생하는 에러를 모두 잡는 역할. configuration.controlleradvice - RestControllerExceptionAdvice : RestController에서 발생한 에러를 최대한 모두 잡는 역 할. 파일 설명 pom.xml 4.0.0 org.sp..
AWS의 RDS를 사용하면서 터미널로 ssh 접근을 하려 할 때, 기존에는 password가 바로 떠서 ssh에 붙을 수 있었는데 어느 순간부터 password가 뜨지 않더니 명령어가 그냥 씹히는 일이 자주 발생했었다. 사수분께 상황을 말씀드리니 포트 사용중인지(이전에 연결했던 프로세스가 죽지 않았을 가능성)를 확인해보라고 하셨고 이후, 두개의 명령어를 알게되었다. 특정 포트를 사용하고 있는 프로세스 확인 lsof -i :포트번호 만약 lsof -i : 0000이라는 명령을 치면 위와 같은 테이블이 나타나게 되는데 여기서 PID 라는 부분을 확인해야한다. 예를들어, 톰캣이 8080이라는 포트를 사용중일 때 lsof -i : 8080으로 확인하면 해당 프로세스의 PID로 톰캣을 죽일 수 있다. 특정 포트를..
기존의 문자열 비교 기존에 문자열 비교를 할 때는 당연히 String 클래스의 equals() 메소드를 사용하라고 암기적으로 외워왔을 것입니다. 예를 들어, "String 문자열의 경우 ==(참조값 비교) 가 아닌 equals() 메소드로 값 비교를 한다." 라는 식으로 말이죠. 이 문장은 자바 1.7까지는 유효했을 것입니다. String의 문자열이 일치하는지는 당연히 equals() 메소드로 확인이 가능했으니까요. String 클래스의 equals() 메소드를 보겠습니다. String equals() 메소드 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String..
프로젝트 구조 설명 - controller, model, service, repository로 패키지 구조화 - model 패키지의 경우 DTO, VO 같은 데이터 클래스가 정의되어있는 패키지 인데, 이것을 * 컨트롤러에서 파라미터로 받는 Param, * DB에서 select문의 결과로 반환될 Entity, * ResponseEntity Json형태로 반환될 Result 객체로 구분 - service 클래스는 인터페이스를 클래스가 구현하는 형태가 아닌 직접 클래스가 역할을 하는 쪽으로 함. -> 인터페이스를 이용하여 다형성을 구현하는 형태가 아니라 일종의 루틴처럼 사용되는 경향이 있어보여서 과감히 탈피. - 이전 챕터에서 진행했던 home 클래스는 삭제해도 됨. - API 테스트를 진행할 BoardCon..
안녕하세요. 스프링 부트를 이용한 REST API 게시판 서버 만들기 예제를 진행해보려고 합니다. 초급수준으로 진행하며 JUnit을 이용하여 테스트 코드를 작성할 것이고, Jacoco 코드 커버리지도이용해보고자 합니다. 코드 커버리지란 테스트 코드를 수행할 때 테스트하지 않은 부분을 퍼센트(%)로 측정할 수 있게 하는 부분입니다. pom.xml에 설정을 통해서 서버를 실행할 때 특정 퍼센트를 넘지 않으면 빌드할 수 없도록 설계도 가능합니다. 모든 소스는 이곳에서 확인하실 수 있습니다. 간단한 예제로 먼저 소개해보겠습니다. 프로젝트 스펙 - 스프링 부트 2.2.2 버전 - 자바 1.8 - 롬복 - JPA - H2 - spring-restdoc - JUnit(4.12) - jacoco(0.8.5) - spr..
맥을 사용하다보면 이러한 아이콘을 많이 보셨을 것입니다. 이는 윈도우의 cmd(명령 프롬프트창)와 같은 역할을 하는 리눅스 기반의 터미널입니다. 저는 회사에서 개발을 할때, AWS RDS에 접근하기 위해서 시큐어쉘 명령어를 이용한 아주 복잡한(실제 주소공개는 하지 않기위해서) 명령어를 매번 복사해서 붙고 password를 입력하고 난 후에야 RDS에 접근할 수 있었습니다. 예를 들어, "myaccount@포트주소 -p 22 -N -L 5432:rds주소:포트" 이러한 명령어를 매번 메모장이나 중요 보관함에 보관해놨다가 복사해서 터미널에 붙여넣곤 했었습니다. 다 외울 순 없으니까요!!! 그런데 한가지 쉽게 해결할 방볍을 알게되었습니다. 바로 alias를 이용한 것인데요. 터미널 창을 켜보겠습니다. 예를 들..
자바에서 커스텀 어노테이션을 만드는 방법은 다음과 같다. public @interface MyAnnotation { } 사실상 인터페이스 키워드에 @를 붙이면 되는 것인데. 이것을 곧바로 클래스, 필드, 메서드 같은 곳에 붙이면 어노테이션으로써의 껍데기 역할은 할 수 있게 된다. - @MyAnnotation 사용 예) @MyAnnotation public class MyMain{ public static void main(String[] args){ System.out.println("Hello World!"); } } @Retention 어노테이션 - Book 클래스 package org.example; @MyAnnotation public class Book { private static String..
리플렉션은 Class 타입으로 시작합니다. 도큐먼트 : https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html Class (Java Platform SE 8 ) Determines if the specified Class object represents a primitive type. There are nine predefined Class objects to represent the eight primitive types and void. These are created by the Java Virtual Machine, and have the same names as the primitive types tha docs.oracle.com 위의 ..