모험가의 Spring
JpaRepository에서 Optional 객체에 담긴 정보 가져오기
개발을 시작하기 얼마 안됐을때쯤 JPA를 통해 Optional 객체로 사용자의 정보를 가져와서 리스트나 아니면 다른 값으로 Response 해주는걸 하다가 의문점이 들었다. 그럼 원하는 정보를 하나만 딱 뽑아서 가져오는건 어떻게하지..? 이것만 쉽게 한다면 세상 뭐든걸 다 개발할 수 있을 것 같아서 바로 찾아봤다. 사실 그렇게 어려운건 아니다. Optional 클래스에 대한 지식이 어느정도만 있어도 충분히 가능한 수준이지만 자린이였던 내가 그런걸 알리가 없다. 그렇기 때문에 바로 다시 개념 공부,, 아래는 필자가 생각하기에 간단한 개념정리가 잘되어있다고 생각한 블로그이다. Optional 1. Optional 소개 catsbi.oopy.io 흔히 우리가 자주 사용하는 Jpa에서 findById를 하였을때..
Spring 개발할때의 패키지 구조 🙂
! 패키지 구조를 구성할때 가장 대표되는 2가지 ! Layer vs Domain 🤔 /* Layer 구조 Layer : controller, Service, dto 같은 아키텍트적인 계층형 기반으로 구성된 패키지 구조 장점 -> 프로젝트에 이해가 낮아도 전체적인 구조를 빠르게 파악가능 -> 작성하고자 하는 계층이 명확할 경우 빠르게 개발이 가능 단점 -> 각 레이어별로 수십개의 클래스들이 존재하여 코드 파악이 어려움 -> Layer를 기준으로 분리했기 때문에 코드의 응집력이 떨어짐 */ /* Domain 구조 Domain : 도메인들이 최상단 루트로 구성된 패키지 구조 장점 -> 관련된 코드들이 응집해 있음 -> 디렉토리 구조를 통해 도메인을 이해할 수 있음 단점 -> 도메인 지식 없이 이해하기 어려움 ..
인텔리제이로 Spring을 개발할때 TIP !
플러그인 1. CSV : CSV 파일을 적극적으로 활용하자 - 실무에서 자주 사용되는 플러그인, 대량 등록/ 타 팀에게 특정 데이터를 전달해줄때 효율적으로 사용 가능 2. Git Toolbox : Git에 도움을 주는 플러그인 - 코드 라인에 마지막 Commit 이력이 출력됨, 주석처럼 사용할 수 있다. 3. JPA Buddy : JPA가 익숙치 않다면 사용 추천 4. String Manipulation : - String, 멀티 드래그 같은 입력에 관련해 막강한 편의기능을 지원해줌 편의기능 command + E : 최근 변경 파일 목록 command + shift + A : 액션 검색 기능 command + control + G : 같은 네임 멀티 라인 복사, 편집 option option + 아래 방..
uses unchecked or unsafe operations 에러 해결
Java5 부터 생긴 에러라고 한다, 컴파일이 정상적으로 실행되며 서버도 정상적으로 가동이 되지만 개발할때 이러한 점은 눈엣가시이기 때문에 해결하기 위해 또 뒤적뒤적 찾아봤다. 원인 : 제네릭 타입 클래스를 선언할 때 자료형이 명시되지 않았을 때 발생한다, 주로 List,Map 등을 사용할때 자주 마주칠 수 있다. 나의 경우에는 위와같이 HttpEntity를 생성해줄때 정확히 명시해주지 않아, operation이 안전하지 않다는 오류가 난 것이다. 아래는 해결
예외 처리 _ Custom Exception 만들기
개발을 하다보면 정말 수많은 Exception을 만나게 된다. 그러면 우리는 항상 구글링을 통해, 또는 코드를 뒤적뒤적하다가 Exception을 해결하곤 한다. 근데 이러한 Exception을 사용자가 마주했다면? 그렇다면 분명히 제대로 설명이 필요할 것 이다. 이며 표준 명시된 예외처리가 나간다고 하면 우리의 API를 사용하는 유저들은 불친절한 에러에 당장 회원탈퇴를 누르고 말 것이다. 그렇다면 서버에서는 어떻게 해야 사용자들이 잘못된 방식, 접근을 하였을 경우 Exception을 어떻게 처리해주면 좋을까? 방법은 Exception을 Custom 해주면 된다. 쉽게 말해 우리가 직접 예외처리를 만들어 주면 된다. 만약 사용자가 아이디 또는 비밀번호를 잘못 입력하여 Exception을 마주했다고 했을때 ..
SpringSecurity 접근 허용에 주의 할 점
내가 진행하던 프로젝트를 개발하던 도중 내 골머리를 부실려했던 에러가 하나 있었다, 사실 별거 아니였는데 너무나도 당연하게 생각하고 있어서(...) 해결하지 못했던 에러였던 것 같다. 분명 위 맵핑 주소는 접근 허용을 전체에게 해뒀음에도 불구하고 계속 접근에 대해 검증을 시도하는 것 이였다. 구글링 해도 뭔가 답답하고 제대로 해답이 나오지 않아 미친듯한 삽질을 시작해봤다. 개발하고 있는 코드가 문제일 수도있단 생각에 코드를 갈아엎어보기도 해봤지만 사실 접근문제는 코드문제가 아니기에,, 그래서 Config로 들어가 뭐가 문제일까 열심히 생각을 해보았다. 개발할때 뭔가 문제가 생겼을때 혹시나 이게 ? 라는 생각이 가끔 들때가 있는데 나는 지푸라기라도 잡는 심정으로 설마 맵핑주소 시작에 슬래시가 빠져서 일까?..
com.mysql.cj.jdbc.exceptions.CommunicationsException 해결
코딩을 한 이후 분명 오류가 없었음에도 불구하고 위와 같은 Exception을 마주치는 경우가 있는데, 이는 사실 mysql 서버를 키지 않았기 때문,, 사실 이 외에도 다른 사항으로 위 Exception이 로그에 나타나곤 한다는데 주로 커넥션이 되지 않았을 경우라고 한다. 빌드 메세지를 잘 읽어보면 서버가 닫혀있음을 알 수 있어 해결하기 쉬운 Exception 이였다 근데 혹시 나중에 머리아플때 이런 에러 떴을때 기억안날까봐 혹시 몰라 적어놓는다..😅
Spring을 이용한 CRUD 구현_Create
저번 게시글에서 간단한 회원정보를 입력받고, 데이터베이스와 연동을 통해 저장을 하는 것까지 해보았는데 지금까지 공부한 내용을 토대로 조금 더 자세한 CRUD를 구현해보려고 한다. 여기서 CRUD란 Create, Read, Update, Delete의 약자로써 기본적인 정보처리를 하는 API를 개발 해볼려고한다. 그중 이번에 다루어볼 부분은 Create로써 회원정보를 입력받고 DB에 저장받는 부분을 구현해보도록 하겠다. 코드를 관리하고 유지보수하는것은 정말 중요한 부분이기 때문에 패키지의 구조를 잘 만들고 효율적으로 관리하는 것이 중요함을 공부하면서 기본이 되면서도 중요한 내용임을 계속해서 배우고 있다. 저번보다 더 자세하고 효율적인 패키지 구조를 통해 Create부분을 구현해보도록 하자. Create를 ..
Spring 기초 : SpringDataJpa 사용하기
지금까지 JPA를 이용하여 mysql과 연동해 간단한 회원 정보를 주고받아 봤는데, 이번에는 SpringDataJpa를 이용해 프로젝트를 리팩터링 해보려 한다. 사실 JPA에 관해 공부를 하지 않고 SpringDataJpa를 쓰는 것은 좋진 않지만 현재 사용법에 대해 익히고 있고 기초를 진행하기에 프로젝트를 SpringDataJpa를 이용해 추가 기능을 구현해보려 한다. 당분간은 직접 프로젝트를 통해 어느 정도 흐름을 이해하고 익혀보도록 하자. 상단 폴더에서 Repository에 Jpa 부분을 삭제하고 SpringUserRepository 라는 인터페이스 하나를 생성해주었다. 이 인터페이스를 통해 이미 구현되어있는 메소드들을 불러와 SQL 쿼리문을 자동으로 처리해주는 방식으로 김영한 님의 말씀대로 정말 ..
Spring 기초 : 간단한 회원정보 입력받기 + MYSQL + JPA
서버도 준비가 되었으니, 이제 spring boot를 통해 값을 입력받고 mysql server에 데이터를 저장해보도록 하자. 그전에 글에 대한 이해도를 높이기 위해 아래의 강의를 전부 완독하고 온다면 정말 좋을 것이다. [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 위에 대한 지식을 바탕으로 만든 프로젝트의 폴더 구조를 먼저 살펴보도록 하자. 이번 프로젝트에선 View를 사용하지 않고 포스트맨으로 값을 입력받고 데이터가 잘 저장되는지 확인을 해보려고 한다. mvc의 형식으로 직접 form..