SW 산학연계프로젝트 정리 2024.02.19~2024.02.23까지 이루어진 한국외국어대학교 SW산학연계프로젝트에서 실습한 내용입니다. 서비스 구조도 웹 프론트는 HTML와 CSS, 백은 SpringBoot를 통하여 구현하였음. 사전작업 SageMaker를 통한 모델 배포 모델은 입력으로 receiver_id, sender_id, amount, timestamp를 입력으로 받고 transaction_category를 예측한다. transacton_category는 Uncategorized, Entertainment, Education, Shopping, Personal Care, Health and Fitness, FOod and Dining, Gifts and Donations, Investments..
H2와 JPA를 사용하기 위한 기본 설정 중 PersonRepository가 스프링 빈에 등록되지 않는 에러가 발생. 해결하기 위하여 @EnableJpaRepositories를 통하여 스프링 실행 중 레파지토리를 빈에 등록할 수 있도록 하였지만 같은 에러가 발생하였다. @Repository public interface PersonRepository extends JpaRepository { } *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method init in com.ghrnwjd.httpresponsecode.data.DBinit require..
JPA에서 양방향 매핑 설정 후 유저 정보 조회를 하는 과정에서 무한히 서로를 참조하는 에러가 발생하였다. /service/UserService.java Spring Data JPA를 이용하여 유저정보를 조회하는 코드 작성하였다. public User findUser(String username) { return userRepository.findByUsername(username); } 에러 발생 구글링을 해보니 @JsonIgnore 어노테이션을 사용할 수 도 있지만 DTO를 만드는 것이 효과적이라고 한다. User의 모든 정보를 보기 위해 UserDto는 User의 모든 필드를 포함하도록 작성하였다. ** domain/dto/UserDto.java ** domain/dto/MemoDto.java **..
Response를 할 때 응답코드를 어떻게 보내야 좋은건지 알아보았다. * CommonResponseDto.java @NoArgsConstructor @AllArgsConstructor @Data public class CommonResponseDto { private int statusCode; private String status; private T data; } 보통 statusCode만 리턴하는데, 공부하는 겸 statusCode에 대한 설명을 담은 status 변수를 담아주었다. 그리고 리턴할 데이터를 제네릭 타입으로 설정하여 어떤 데이터에 대해서도 인자로 받을 수 있도록 하였다. * UserAPIController.java @GetMapping("/user/dto") public Common..
url로 쿼리를 전달해서 보낼 때 GET 메소드를 구현하는 방법에 대해서 알아봤다. 1. @RequestParam @GetMapping("/user/query") public String 유저정보출력쿼리(@RequestParam Map params) { StringBuilder sb = new StringBuilder(); params.entrySet().forEach(param-> { sb.append(param.getKey()+ ": " + param.getValue() + "\n"); }); return sb.toString(); } 응답 원래 쿼리스트링으로 몇개가 올지 모른다는 단점 때문에 사용하지 않고 있다가 Map 자료구조를 사용하면 개수에 상관없이 사용할 수 있다는 것이 좋은 것 같다. 2...
추상 클래스 하나 이상의 메서드가 추상메서드이거나 abstract로 정의된 경우 public abstract class 클래스이름 { public abstract void 메서드이름(); } 추상 클래스는 인스턴스, 즉 객체를 만들 수 없는 클래스 입니다. (추상 클래스를 구현한 클래스의 인스턴스는 만들 수 있다.) 추상 메소드는 하위 클래스에서 메소드의 구현을 강제해야 합니다. 추상 메소드를 포함하는 클래스는 반드시 추상 클래스여야 합니다. 상속하는 집합간에는 연간관계가 있습니다. 다중 상속이 불가능합니다. 인터페이스 모든 메서드가 추상메서드인 경우 인터페이스는 ==상수와 추상메서드== 의 집합이다. interface 인터페이스이름 { public abstract void 메서드이름(); public ..
https://www.acmicpc.net/problem/6593 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 문제를 풀다가 메모리 초과가 발생하였다. 메모리초과가 뜨는 이유로 Queue에서 뽑을 때 visited를 처리하는 것이 아닌 Queue에 넣을 때 visited 를 처리해야된다는 것이다. [메모리 초과 코드] queue.poll() 이후에 visited를 체크한다. Queue queue = new LinkedList(); queue.add(start); StringBuilder sb = new Stri..
스프링 JPA 공부 중 연관관계에 대해 공부하던 중 외래키가 있는 부분을 연관관계의 주인으로 설정해야된다. 이 때 외래키가 있는 부분은 주로 다에 해당된다. 팀과 멤버가 있을 때 멤버가 팀의 FK를 가지 있다면 멤버가 연관관계의 주인이 되고 일에 해당되는 곳은 자바 컬렉션인 Collection, List, Set, Map 중에 하나를 사용한다. 컬렉션 자바에서 컬렉션이란 데이터의 집합, 그룹을 의미하고 자바컬렉션프레임워크(JCF)는 컬렉션과 이를 정의하는 인터페이스를 제공한다. List, Set, Queue는 Collection의 하위 인터페이스로서 상속받고 있다. Map도 크게 보면 Collection을 상속받고 있지 않지만 의 일부로 볼 수 있다. 1. Set Set 인터페이스를 구현하는 클래스로 H..
Entity와 DTO를 분리하는 이유 1. Entity 보호: Entity는 자원의 속성이 무분별하게 변하면 안되기에 Setter 사용을 자제해야 한다. 그에 비해 DTO는 Getter, Setter에 영향이 크지 않다. 2. 필요한 데이터만 선별: 사용자의 경우(id, pw, email, address 등)으로 엔티티가 구성되어 있고 로그인을 한다고 가정을 하면 필요한 데이터는 id, pw의 값을 가지고 있으면 된다. 3. 순환참조 예방: JPA에서 양방향 참조 엔티티를 컨트롤러에서 반환하면 순환참조가 발생하고 스택오버플로우가 발생. 이를 DTO를 통해 예방할 수 있다. DTO (Data Transfer Object) 로직을 가지지 않는 자바 빈이다. MVC간 데이터 교환을 위한 객체이며 Getter,..
https://github.com/ghrnwjd/graduation-plan-plus/tree/main GitHub - ghrnwjd/graduation-plan-plus: HUFS SUMMER HACKERTHON TEAM 426: Graduate Plan+ HUFS SUMMER HACKERTHON TEAM 426: Graduate Plan+. Contribute to ghrnwjd/graduation-plan-plus development by creating an account on GitHub. github.com 1. 시작 페이지 2. 로그인 페이지 2-1 회원가입 Controller @PostMapping("/student/add/{department}") public ResponseDto ad..