Framework/Spring Boot
How to set java.home at vscode with MacOs
windows 환경은 c://로 시작하는 패스 예시가 많이 있는데 맥에서는 구체적인 예시 찾기가 어려웠어서 기록. it was hard to find an example how to set java.home path with mac. you can find some example with windows env, but not with mac in google. terminal에서 조회할 때에는 /usr/libexec/java_home -V 명령어를 사용하면 결과물이 아래와 같이 나온다. enter command /usr/libexec/java_home -V in terminal and you will get the next lines as the answer. Matching Java Virtual Ma..
Swagger 오류: Unable to infer base url. ...
새로 진행하는 프로젝트에서 swagger 설정을 해보았는데 아래와 같은 오류가 발생했다. 설정 오류라 얼럿으로 팝업이 출력되면서 swagger-ui.html화면으로 연결이 안 되는 현상. Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. ... (후략) @EnableSwagger2 어노테이션을 Config클래스에 달아라, 메인클래스에 달아라, 버전을 2.9.2로 낮춰라, 스프링 시큐리티와 설정 충돌 문제다 등등..
오류: 기본 클래스 " "을(를) 찾거나 로드할 수 없습니다.
패키지명에 오타가 나서 리팩토링 후 기본 클래스 로드 불가 에러 메시지가 뜨는 경우. 캐시삭제, .gradle 폴더 삭제, 프로젝트 리빌드 다 소용없고.. Menu > Run > Edit Configurations > Run/Debug Configuration > Main class:를 변경한 클래스명과 동일하게 수정하면 바로 적용된다...
Configuration error (css, js 파일이 Servlet을 타서 발생하는 오류)
입사 후 과제를 하던 도중 css파일에 대한 mapping이 없다는 오류가 자꾸 뜨기 시작했다. Spring Security와 interceptor 설정을 하다가 발생했다. 로그인 인터셉터를 설정하고 싶었는데... 아래 컨피그 클래스 소스에서 Configuration Annotation을 지우면 문제 없이 돌아가지만 인터셉터가 작동하지 않고, 반대의 경우엔 인터셉터를 포기하고 css를 정상적으로 읽어오는 상황. @Configuration public class CustomWebMvcConfigurer extends WebMvcConfigurationSupport { @Override //로그인 인터셉터.. protected void addInterceptors(InterceptorRegistry regi..
스프링 빈과 의존관계 - 자바 코드로 직접 스프링 빈 등록하기
설정파일 별도로 만들 때 Service, Repository에 어노테이션 없이 설정파일에서 별도로 등록해주는 방법이다. XML로 설정하는 방법도 있는데 현재는 잘 사용하지 않는다. DI에는 필드 주입, setter 주입, 생성자 주입 3가지 방법이 있다. 의존관계가 실행중 동적으로 변화하는 경우가 거의 없으므로 생성자 주입을 권한다. 처음에 앱이 조립될때 생성자로 한번만 들어오고 끝남. 필드 주입은 바꿀 수 있는 방법이 없어서 좋지 않다. 상황에 따라 구현 클래스를 변경해야 하면 스프링 설정 파일을 이용해서 변경한다. package hello.hellospring; import hello.hellospring.repository.MemberRepository; import hello.hellospring..
회원 관리 예제 #04 회원 서비스 테스트
확실히 스프링 레거시로 프로젝트를 진행해보고서 하니까 이해가 빨리 되는 거 같다. 뒷부분엔 전혀 모르던 JPA같은 개념들이 나오니까 그 부분에선 시간이 좀 더 걸릴지도 모르겠지만 이대로라면 4월 중순이면 완강할 수 있지 않을까? 순서대로 코드만 나열. 주석으로 열심히 필기(?)해두었다. //처음에 자동완성된 코드 @Test void join() { } @Test void 회원가입() { //테스트 메소드는 과감하게 한글로 바꾸셔도 됩니다 } @Test void 회원가입() { //테스트 메소드는 과감하게 한글로 바꾸셔도 됩니다 //테스트는 아래의 3단계로 나눠진다. 아닐 때도 있지만 일단 이렇게 주석을 깔고 하는 방법을 권장함 //given: 이런 상황이 주어져서 - 이 데이터를 기반으로 하는구나 Mem..
회원 관리 예제 #03 회원 서비스 개발
디렉토리 구조 이제 Service 패키지를 만들었다. 여기서 비즈니스 로직을 구현한다. 코드 정리 먼저 멤버 레포지토리 객체를 생성한다. 서비스를 만들기 위해서 각종 메소드를 호출해와야 하기 때문에 클래스 내에서 공유될 객체다. 먼저 Optional 객체를 선언하여 사용한다. public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); //서비스를 만들려면 우선 repository가 있어야겠죠 /** * 회원 가입 */ public Long join(Member member){ //같은 이름이 있는 중복 회원X Optional result = memberRepository..
회원 관리 예제 #02 회원 리포지토리 테스트 케이스 작성
테스트케이스 코드를 코드로 검증한다. 개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹앱의 컨트롤러를 통해서 해당 기능을 실행한다. 이런 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기가 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다. 테스트 메소드는 서로 의존관계 없이 설계되어야 한다. 테스트가 하나 끝날때마다 공용 데이터를 클리어해줘야 한다. TDD: 테스트 클래스를 먼저 작성한 다음에 리포지토리를 작성하는 방법. 테스트 주도 개발방법이다. class MemoryMemberRepositoryTest { MemoryMemberRepository repository = n..
회원 관리 예제 #01 비즈니스 요구사항 정리, 회원 도메인과 리포지토리 만들기
비즈니스 요구사항 정리 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 데이터 저장소가 선정되지 않아, 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL등 다양한 저장소를 고민중인 상황으로 가정 개발을 진행하기 위해 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용 일반적인 웹 애플리케이션 계층 구조 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 → 도메인 개념을 간략하게나마 짚고 넘어간다. 회원 도메..
스프링부트 라이브러리 살펴보기
Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. 스프링 부트 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat (웹서버) spring-webmvc (스프링 웹 MVC) spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View) spring-boot-starter(공통): 스프링 부트+스프링 코어+로깅 spring-boot spring-core spring-boot-starter-logging logback, slf4j 테스트 라이브러리 spring-boot-starter-test junit: 테스트 프레임워크 mockite: 목 라이브러리 assertj: 테스트 코드를 더 편하게 작성하게 도와주는 라이브러리 ..