전체 글
-
새로운 환경에서 IntelliJ로 Spring code를 clone받고 돌리면 원인모를 현상으로 프로젝트가 전부 깨지는 현상Backend/SPRING 2022. 5. 31. 19:11
얼마 전, 직장에서 재택근무를 시행하게되서 집 컴퓨터에서 intelliJ를 설치하여 프로젝트를 돌릴 일이 있었습니다. 저는 config 파일을 복사하여 가져왔기 때문에, 아주 자신만만하게 config를 import 시켰습니다. 생각했던 대로라면 intelliJ configuration import 시키고(이 과정에서 원하는 plugin, 단축키 등등 모든것이 설정되게 되어집니다. 평소에 사용하던 intelliJ의 setting을 그대로 가져오는게 되니까요), git clone 받고 spring boot를 시작하면 평화로웠어야 됬습니다. 하지만 이상하게 프로젝트 전반에 전부 빨간줄이 그어지면서 java class를 읽지 못하는 현상이 나타났습니다. "어라, 왜이러지?" 이상했습니다. settti..
-
'jdk directory path' is not a valid jre home / jre home 경로를 찾을 수 없습니다Backend/SPRING 2022. 5. 31. 19:09
(저는 Back-end 관련 코드는 전부 IntelliJ에서 작성하고 있으므로, 그 점 유의해서 포스팅 봐주세요!~) 안녕하세요. 테스트 케이스를 돌리실 때 포스팅의 제목과 같이 위와 같이 jre home의 경로를 찾지 못했다는 오류를 접하신 적이 있으실 텐데요. 이 경우는 테스트 케이스를 돌릴 때 jre가 어디에 설치되어 있는지 제대로 경로를 찾지 못해서 발생하는 오류입니다. - 완전히 해결하고 싶으신 경우 1. 먼저 jre의 경로를 찾음 2.IntelliJ의 우측 상단에 EditConfigurations 클릭 3.Junit 탭을 클릭, 그 후 상단의 공구를 클릭합니다. 4. JRE 경로를 지정해 줍니다. *잠깐! jre 경로는 어디서 찾을 수 있나요? window의 경우 통상적으로는 jdk를 설치한 ..
-
What is difference thing between 'junit-vintage-engine' and 'junit-jupiter-engine'Backend/SPRING 2022. 5. 31. 19:07
요세 Junit4에서 작성하던 테스트 코드를 Junit5에서 작성하고 있는데요. vintage-engine 관련된 의존성을 삽입해서 테스트 하다가 오류가 나서 이것저것 찾아보니, junit5는 jupiter engine 기반으로 돌아가더라구요.... 말나온 김에 차이점을 말씀드려보면 1.junit-vintage-engine (1) junit4 테스팅을 위해 사용됨 (2) core class 혹은 annotation 들이 호출되는 방식으로 사용됨 (3) @Ignore, @Before, etc와 같은 annotation들이 쓰임 2.junit-jupiter-engine (1) junit5 테스팅을 위해 사용됨 (2) 테스트에 필요한 기능들을 제공하는 api를 호출하는 방식으로 사용됨 (3) @Disa..
-
Java Class안에서 Yaml(application.yml)에 기재해놓은 정보 가져와서 사용하기 / The way use variables written in yamlBackend/SPRING 2022. 5. 31. 19:04
많은 기업에서, Spring을 사용하실때에 application.properties 혹은 application.yaml 파일 안에 여러가지 application에 관한 정보를 많이 넣어두실 것 같아요. Yaml은 application.properties 보다 진보된 작성법이라는 이야기가 있는데요. 제가 근무하고 있는 회사에서는 application.yml을 사용해서 application 동작에 필요한 기능들을 정의하고 관리하고 있어요. 그런데 의외로 yml에 있는 정보들을 온전히 project로 가져와서 다루는것이 쉽지 않았어서 그 과정들을 아래에 기재해놓으려고해요. 1. application.yml에 필요한 정보들 정의 (참고로 yaml을 작성해주실때에는 구간별 띄어쓰기를 주의해주셔야 합니다..
-
Swagger에서 get방식으로 @requestParam을 넘길때 표기하는 방법 / The way writes param information at SwaggerBackend/SPRING 2022. 5. 31. 19:00
보안적인 문제때문에 대부분 @PostMapping을 사용하시겠지만, 정말 간단한 API 같은 경우에는 @GetMapping으로 기능을 구현하실 일도 꽤 있으실 것 같은데요. 아래와 같이 @GetMapping Annotation을 사용한 후 ... @GetMapping(value = "/user/list") 넘기고자 하는 해당 파라미터에 아래와 같이 표기하면... Swagger에 정상적으로 나옵니다. @RequestParam @ApiParam(name = "userType", value = "직업 타입", required = true, example = "PROGRAMMER") String userType 감사합니다.
-
스웨거에서 노출되기를 원하지 않는 값들을 감추는 방법 / The way hides api property in SwaggerBackend/SPRING 2022. 5. 31. 18:58
Spring에서 Swagger 작업을 하시다 보면, Client 개발자분에게 노출되지 않았으면 하는 값이 분명히 있을거라고 생각합니다. VO도 내부에서 쓰는 VO가 있을테니까요. (물론 가장 좋은건, requestDTO와 responseDTO를 완전히 불리하고 해당 class를 구성하는 변수들까지도 깨끗하게 분리하는 것이곘지만요) 서론이 길었는데요, 결론은 간단합니다. hide처리하고 싶으신 값 위에 아래와 같이 적어주시면 됩니다. @ApiModelProperty(hidden = true) 도움받은 링크도 같이 첨부합니다. https://github.com/springfox/springfox/issues/554 @ApiModelProperty "hidden" attribute has no effect ·..
-
Swagger에서 VO/DTO를 표기하는 방법 / The way write VO/DTO in SwaggerBackend/SPRING 2022. 5. 31. 18:57
Controller에서 어떠한 값을 request로 받는지, 어떻게하면 Swagger로 잘 표기하고 싶으실까? 에대한 고민을 하는 개발자분들이 많을 것입니다. 요청의 종류에 따라서 나누어서 설명드리고자 합니다. 1. Get방식의 @RequestParam 일경우 (@RequestParam은 Swagger의 기능이 아니니 다른 포스팅에서 다루도록 하겠습니다.) (1) @RequestParam을 사용하시는 경우는 아래와 같이 parameter가 간단하신 경우이실 것입니다. 그러니까, 애초에 parameter가 복잡하셨으면 get으로 넘기지는 않으셨을 것이라고 예상됩니다. 복잡하셨으면 post로 class를 묶어서 전송하셨을 것이라고 생각됩니다. 그런 경우, Controller단에서 @ApiParam 이라는..
-
Swagger에서 Enum을 표기하는 방법 / The way express Enum in SwaggerBackend/SPRING 2022. 5. 31. 18:54
Swagger에서 주로 하는 고민은 프로젝트 전반적으로 쓰이는 DTO/VO를 어떻게 이쁘게 표현해줄까? 일텐데요. Enum에 대해서 단순하게 표기했다가, 우연히 방법을 찾게되어 공유드립니다. DTO/VO에 속하는 Enum값들을 표기하는 방법입니다. @ApiModelProperty( value = "해당 값에 대한 설명" , example = "실제 예제로 들어갔으면 하는 값" , required = true , allowableValues = "FIRST_TYPE, SECOND_TYPE" ) AnyTypeEnum anyTypeEnum; FIRST_TYPE, SECOND_TYPE에 실제 ENUM값을 적어주시면 됩니다. DTO/VO 자체를 표기하는 방법에 대해서는 다른 포스팅에서 다루겠습니다. 감사합니다.
-
Lombok의 @Builder 기능을 상속받은 class에서도 사용하는 방법Backend/SPRING 2022. 5. 31. 18:53
Lombok의 Builder 어노테이션은 객체 생성 시에 속성값들을 연쇄적으로 호출하므로 코드의 품질을 높이는 데에 좋은 어노테이션입니다. 하지만 상속을 받은 class에서 사용하게 되면 어째서인지 부모 class의 속성값들을 참조하지 못하죠. 그런 경우 아래와 같은 처방을 해주시면 됩니다. 1. 부모 클래스에서 @AllArgsConstructor를 사용하여 모든 파라미터로 객체를 생성할 수 있게 어노테이션을 붙여줍니다. @Getter @AllArgsConstructor public class Parent { private final String parentName; private final int parentAge; } 2. 자식 클래스에서 아래와 같이 처리해 주시면 됩니다. 모든 필드를 받는 ..
-
Can't find catalina.jar / 카탈리나 jar파일을 찾을 수 없습니다Backend/SPRING 2022. 5. 31. 18:48
톰켓 설정을 하시다보면 위와 같은 Error log를 마주치는 경우가 있으실 겁니다. 이러한 에러는 톰켓 설정을 잘못해서 나오는 에러입니다. 1. 우측 상단의 초록색 망치 옆의 tomcat server 설정 탭 클릭 2. Edit configuration 클릭 3. 지정하신 tomcat server 이름 아래에 보면 Application server : 톰켓 버전 configure... 이라는 버튼이 보이실 겁니다. 4. confgirue 버튼 클릭 5. Tomcat Home과 Tomcat base directory가 제대로 지정되어 있는지 확인합니다.
-
문제없이 build 되던 Spring project가 갑자기 build 되지 않을 때Backend/SPRING 2022. 5. 31. 18:20
ERROR Root contains invalid attributes "priority", "value" annotation.ClassPathScanningCandidateComponentProvider : Ignored because not a concrete top-level class 라는 글자가 나오면서 잘 동작하던 Spring 프로젝트가 build 되지 않을 때가 있습니다. 그러한 경우에는, module로 지정해 놓으신 하나하나의 모듈들을 전부 clean 해주신 후, dependency를 바로 install 하지 마시고 project rebuild 후 intelliJ를 재시작하시면 문제없이 재시작됩니다. (이 포스팅은 너무 짧으니까 추후에 계속 작성하면서 case를 추가하도록 할게요) 감사합..
-
Mapped Statements collection does not contain value for...Backend/SPRING 2022. 5. 31. 18:17
Spring + Mybatis로 개발을 하면 위와 같은 에러는 굉장히 흔하게 발생합니다. 다른 블로그에서도 많이 다루고 있는 내용이지만 먼 미래에 스스로가 제 블로그 안에서 검색하기 위해서 정리합니다. 1. Mapper ID가 다를 경우 발생합니다. (... 이곳에 id 아이디와, java에서 접근하는 id가 다른 경우) 2. Mapper File(XML)에 정의된 Name space와 Dao에서 호출하는 ID의 Name space가 다를 경우 발생합니다. 3. Mybatis config file에 mapper가 정의되어있지 않거나 철자가 틀린경우 발생합니다. 4. Mapper에 정의된 Name space의 명칭이 같은 Application 내에 중복될 경우 발생합니다. 저 같은 경우 1번과 4번..
-
How can I remove space in character in JAVA when developer can't use... / Java 공백제거가 trim()으로 되지 않을때Backend/SPRING 2022. 5. 31. 18:16
Server에서 Database에서 긁어온 정보들을 Client에 뿌려줄 때 char로 지정하여 내려주는 경우 의도하지 않은 공백이 발생할 수 있습니다. (아마도 성능상의 문제로 쿼리문을 작성할때 replace 함수를 사용하지 않은 것이 아닐까? 하는 추측이 들긴 합니다) 저의 경우 이런 상황에서는Data를 받아서 Service단에서 공백을 제거합니다. 그런데 아무리 Trim으로 제거하려고 해도 되지 않는 것입니다. replaceAll(" ", "") 로도 지워지지 않고요. 위의 코드로 삭제되지 않는 이유는 공백이 아니라 유니코드가 삽입되었기 떄문입니다. \u3000 코드로만 존재하는 공백입니다 이런 경우에는 아래와 같이 제거해주면 해결됩니다. String brandon = beforeBran..
-
Java.io.FileNotFoundException:... War 파일 경로.. (지정된 파일을 찾을 수 없습니다) 오류Backend/SPRING 2022. 5. 31. 18:12
Spring으로 개발 잘 하고 있다가 로컬에서 변경사항을 확인하려 Redeploy, Server Restart를 하면 제목과 같은 Error를 뿜어내며, artifact를 찾을 수 없다는 메시지를 뿜어냅니다. 톰캣 설정으로 Spring 띄우는데 고생해보신 분들은 눈치채셨겠지만 Tomcat 설정에서 war 파일을 교체해 주면 해결되는 문제입니다. 저는 이 오류가 발생할 때마다 매번 익숙한 듯 war 파일을 교체합니다. 하지만 그냥 '또 이러네...'하며 war 파일을 교체할 뿐 아직까지 이 오류가 왜 발생하는지 파악하지 못하고 있습니다. 혹시나 아시는 분 계시면 댓글 부탁드립니다. 해결방안은 아래와 같습니다. IntelliJ에서 서버를 띄웠다는 가정 하에 포스팅을 기재하겠습니다 1. ..
-
Java.io.FileNotFoundException:... War 파일 경로.. (지정된 파일을 찾을 수 없습니다) 오류Backend/SPRING 2022. 5. 21. 20:37
Spring으로 개발 잘 하고 있다가 로컬에서 변경사항을 확인하려 Redeploy, Server Restart를 하면 제목과 같은 Error를 뿜어내며, artifact를 찾을 수 없다는 메시지를 뿜어냅니다. 톰캣 설정으로 Spring 띄우는데 고생해보신 분들은 눈치채셨겠지만 Tomcat 설정에서 war 파일을 교체해 주면 해결되는 문제입니다. 저는 이 오류가 발생할 때마다 매번 익숙한 듯 war 파일을 교체합니다. 하지만 그냥 '또 이러네...'하며 war 파일을 교체할 뿐 아직까지 이 오류가 왜 발생하는지 파악하지 못하고 있습니다. 혹시나 아시는 분 계시면 댓글 부탁드립니다. 해결방안은 아래와 같습니다. IntelliJ에서 서버를 띄웠다는 가정 하에 포스팅을 기재하겠습니다 1. ..