반응형

JAVA 159

[Spring] 인텔리제이 디렉토리 구조 변경 중 발생한 Error

intellij로 스프링으로 작업하던 중, 도메인 폴더 내에 controller, service, dto, domain, mapper 등 파일이 너무 많아져서 예쁘게 폴더별로 정리하던 도중 에러가 발생했다. 폴더 변경 리팩토링 과정에서 인텔리제이는 import 폴더경로를 자동으로 수정해주기 때문에 웬만해선 에러가 발생하지 않는데, 에러가 발생해서 조금 당황스러웠지만, 차근차근 살펴보니 어렵지 않았다. 에러 내용은 아래와 같았다. Annotation-specified bean name 'memberIdMapperImpl' for bean class [algopa.study.member.mapper.MemberIdMapperImpl] conflicts with existing, non-compatible b..

[Java] Spring Security를 이용한 로그인/로그아웃 기능 구현 1. 환경설정 (Thymeleaf + Gradle + IntelliJ + Spring Security + MySQL)

요즘 알고리즘 ps 위주로 공부하다가, 갑자기 또 개발 흥미가 생겨 간단하게 개인프로젝트를 진행중이다. 급하게 임팩트있게 만드려는 것이 아닌, 개인공부를 위해서 오랫동안 조금씩 꾸준히 만들어볼 생각이다. 대략 생각중인 TodoList는 아래와 같다. Todo List (~22.04.11) 1. 로그인 / 로그아웃 thymeleaf 좀 더 손보기 2. 게시판 기능 (포스트, 댓글, 대댓글) 3. 소셜로그인 기능 4. RestTemplate을 이용한 회원 티어 자동 표시하기 (단, ROLE_GUEST는 제외) 5. 웹소켓을 이용한 댓글알림 기능 6. 채팅방 기능 구현 목표나 다짐은 아래 포스팅에서 볼 수 있다. https://kth990303.tistory.com/125 [210831] 현재까지 나의 공부상..

[SQL][TDD] ERROR 1146 (42S02): Table doesn't exist 해결

로그인 구현을 위해 해시함수를 구현하여 encrypt를 해주는 Salt 기능을 만들기 위해 테스트를 하던 중 [SQL] ERROR 1146 (42S02): Table doesn't exist 에러가 발생했다. 그 이유는 아래 Salt Entity가 존재하는데, Salt 테이블이 만들어지지 않기 때문이다. @Entity @Getter @Setter public class Salt { @Id @GeneratedValue private Long id; @NotNull private String salt; public Salt() {} public Salt(String salt) { this.salt = salt; } } 참고로 이 Salt Entity는 Member Entity와 1:1 연관관계 매핑이 돼있는..

[TDD] @Rollback을 쓰면 원래 DB의 데이터도 사라질까?

@Rollback을 쓰기에 겁나는 사람을 위해 포스팅해본다. 테스트 코드를 작성할 때, @Rollback이라는 기능을 쓰면 테스트 코드에서 insert한 데이터들을 다시 rollback 시켜준다는 점은 모두 알고 있을 것이다. 예시로 db가 텅 비어있었는데, test code에서 repository.save(member1); 을 한다고 해도, @Rollback 어노테이션을 붙일 경우 db가 rollback되어 텅 비는 것을 확인할 수 있기 때문이다. 그럼 db가 비어있지 않고 데이터가 이미 있는 경우에선 rollback을 써도 될까? 정답은 YES. @Rollback은 테스트 코드에서 insert된 데이터들만 rollback시켜주지, 모든 데이터를 rollback시킨다는 의미가 아니다. 위 사진에서 볼 ..

[JPA] JPQL 조건식_ Case When, COALESCE

JPA 완강이 얼마 남지 않았다. JPQL 강의를 들으면 곧 완강할 듯 하다. 최근에 우리 학교의 소그룹 멤버들을 관리할 수 있는 홈페이지를 만들어보고 싶어 구조를 대략 짜봤는데, JPA가 필수불가결일 듯 하여 JPA 기본편, 그리고 활용1편까지 빠르게 완강하기 위해 JPA 강의를 열심히 듣고 있다. 여름방학이 끝나기 전까지 JPA 활용1편, 그리고 Spring MVC 1편 완강을 목표로 달리겠다. 아무튼 이번 시간엔 JPQL의 조건식이 생각보다 유용할 듯 하여 앞으로 잘 참고하기 위해 포스팅하려 한다. 또한, JPQL이 무엇인지 모른다면 이전의 JPQL 포스팅을 참고하면 더 도움이 될 듯하다. https://kth990303.tistory.com/70 [JPA] JPA에서 SQL 쿼리를 작성하는 방법_..

[Spring] 스프링이 태어난 이유_서블릿, JSP로 만든 MVC의 한계

김영한님의 스프링 입문과 기본편을 듣고, 스프링 mvc편을 들으며 Servlet, JSP를 하면서 느낀 점은 요즘은 스프링 프레임워크가 도입돼서 정말 다행이라는 점이다. 이렇게 느낀 이유를 아래에 포스팅해보겠다. Servlet을 하면서 사실 나는 6개월 정도 전에 Spring을 아예 모르고 단순히 웹개발을 해보고 싶다는 마음에 커리큘럼을 알아보다가 완전 쌩 Servlet부터 배워보려고 Servlet을 처음 접한 적이 있다. 그 때 당시 내가 짜던 코드는 회원가입 서비스를 만들어보려고 책을 참고해서 변형해 만들어본 코드였는데, MemberDAO, MemberVO, MemberServlet 세 개의 클래스 코드를 열심히 짠 기록이 깃헙에 남아있어 코드를 가져와보았다. 아래 코드는 HttpServlet을 상속..

[Spring] Solved API를 이용한 개발에 도움이 되는 글

Solved API를 이용하여 건대생이 해결하지 못한 문제를 한눈에 조회할 수 있도록 하는 프로그램을 우아한테크코스 이수 중인 알고리즘 소그룹 동기가 개발하면서 작성한 일지가 있다. https://steady-coding.tistory.com/455 [우아한 테크코스 3기] LEVEL 2 회고 (121일차) 안녕하세요? 제이온입니다. 오늘은 우테코를 온라인으로 진행하였고, 어제 소개했던 업비트 프로젝트가 아닌 다른 토이 프로젝트를 어느 정도 개발하였습니다. 왜 하루 만에 주제가 달라진 것 steady-coding.tistory.com 우리 둘 다 Rest API를 이용한 서버와의 통신은 처음 겪는 내용이라 굉장히 헤맸는데, 저 친구가 열심히 개발을 해주었다. 나랑 Aru0504님이 Solvedac API..

[JPA] JPA에서 SQL 쿼리를 작성하는 방법_ JPQL

김영한님의 스프링 MVC 1편 강좌를 수강하기 전에, JPA 기본편은 완강하고 들으려고 열심히 수강하고 있다. 블로그에 가볍게 기록해보려 한다. 출처: 자바 ORM 표준 JPA 프로그래밍 - 기본편 (인프런 김영한 강사님) JPA를 다루는데 SQL문을 알아야 하는 이유? JPA는 Entity 객체 단위로 개발하기 때문에 객체지향적 설계에 효과적이다. 조회, Create, Delete와 같은 단순 쿼리 작업 시에 굉장히 간단하고 효율적이다. em.persist, em.remove와 같은 메소드를 제공해주기 때문이다. JPA는 검색 시에도 테이블이 아닌 엔티티 객체를 대상으로 검색한다. 그러나 모든 데이터를 엔티티 객체로 변환하여 검색하는 것은 성능 이슈 등 여러가지 문제점으로 인해 불가능하므로 결국 Nat..

Solvedac API를 이용한 해결한 문제 리스트 만들기

이번 포스팅의 목표 userName에 백준 id를 입력하면 solvedac api를 호출하여 그 유저가 해결한 문제 목록들을 가져오기 실행환경 Java 11 Gradle dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' implementation 'org.apache.httpcomponents:httpclient:4.5' implementation 'com.google.code.gson:gson:2.8.6' implementation 'org.json:json:20190722' } 우리 그룹원들을 위한 임시 홈페이지..

[JPA] 값 타입 컬렉션, 임베디드 타입

만약 객체가 다른 객체의 테이블을 참조할 필요는 없는데, 해당 객체가 여러 가지 값을 가지고 있어야 하는 경우는 어떻게 할까? 예를 들자면, kth990303 학생과 aru0504 학생이 있다고 하자. kth990303과 aru0504는 같이 점심을 먹기로 했다. 그러기 위해선 아래 두 가지를 알아야 한다. kth990303과 aru0504는 각각 언제, 어디서 점심을 먹을지 kth990303과 aru0504는 점심으로 무엇을 먹기를 선호하는지 1번을 해결하기 위해서는 각각 일하는 장소와 시간대를 알아야할 것이다. 그러기 위해선 두 객체(Member 객체)에 이 정보들이 있어야할 것이다. 여기서 임베디드 타입이 사용된다. 2번을 해결하기 위해서는 둘이 의견을 통일하여 점심 메뉴를 골라야 한다. 그러나 둘..

반응형