
[Spring Boot] Spring Data JPA - domain과 Entity 개념 / Entity에서 Dto 변환
2022. 8. 24. 23:05
스프링
Entity를 공부하기 전에 먼저 도메인의 개념이 있어야 한다. 도메인을 잘 모르시는 분들은 더보기를 눌러 아래 글을 먼저 보시길 권장드립니다. 더보기 도메인(domian)의 사전적 의미는 영토, 분야, 영역, 범위 따위를 뜻한다. 소프트웨어 공학에서 도메인 모델이란, 특정 문제와 관련된 정보들을 저장하는 개념 모델을 말한다. 이 역시 어떤 "영역"(테이블)을 의미한다고 볼 수 있는데, 의미 자체가 다소 추상적이기 때문에 예를 들어보겠다. 우리가 계좌 관련 웹프로젝트를 진행한다고 했을 때 계좌 목록, 거래 목록 등을 저장해야 한다. 계좌 목록에는 계좌의 소유주, 계좌 번호, 현재 잔액, 생성 일자 등이 기록될 것이다. 거래 목록에도 비슷하게 금융 관련된 정보들이 기록될 것이다. 프로그래밍에서는 이를 데이..

[Git] git clone 시 발생하는 multiple updates for ref ~ 오류 해결
2022. 8. 16. 23:44
Git
fatal: multiple updates for ref '###' not allowed 인텔리제이 이클립스, 혹은 command에서 git clone을 시도했을 때 위와 같은 에러메시지가 떳다면 오늘 하루 굉장히 고생했을 수도 있다. 해당 오류는 구글링으로도 사례를 찾기가 어렵기 때문이다. 이 오류로 고생하신 분들을 위해 단도직입적으로 해결법을 공유하자면, 1. command 실행 (위치 상관 없음) 2. git config --global --unset remote.origin.fetch 복사해서 command에 붙여넣기 여기까지 했으면 다시 git clone 해보자. 왠만해서는 위 방법으로 해결이 되겠지만, 혹시라도 안된다면 경우는 드물지만 아래 방법도 참고하자. 1. Git 폴더 열기 (보통 Pr..

[스프링] JUnit 테스트 시 반복되는 NullPointerException 오류 해결
2022. 8. 13. 23:08
스프링
이클립스로 JUnit 테스트를 돌릴 때 NullPointerException 에러가 발생할 수 있다. 사실 정말 간단하게 해결 가능한데 등잔 밑이 어둡다고 놓치게 되면 멘붕이 올 수 있다. (내가 그랬기에 올리는 글이다) 무엇이 잘못된지 보이는가? 클래스 이름 위에 @SpringBootTest 어노테이션이 빠져서 발생한 문제이다. 추가 후 다시 돌려보자. 깔끔하게 성공! 끝

이클립스 lombok 라이브러리 적용/인식 안되는 오류 해결
2022. 8. 12. 16:28
자바
원인 위와 같이 어노테이션을 작성해도 적용이 되지 않고 빨간줄이 그어지는 경우가 생길 수 있다. 원인이야 여러가지일 수 있겠지만, 가장 흔한 경우는 프로젝트 생성 시 lombok을 의존성으로 추가만 해두고 실제 라이브러리는 설치하지 않은 경우 발생한다. 해결 우선 lombok.jar 파일을 다운로드하자. 링크: https://projectlombok.org/download 다운로드 되었다면 lombok이 설치된 폴더로 가서 경로에 cmd를 입력해 커맨드 창을 열자. 다운로드 받은 lombok에 우리가 사용하는 이클립스 실행파일을 등록하고 설치해주자 lombok이 설치된 경로에서 cmd가 열렸다면 다음과 같이 입력하자 java -jar lombok.jar (lombok 파일 이름) lombok이 열리고 위..

[DB] 트랜잭션의 ACID 특성과 격리 레벨(isolation level)
2022. 8. 7. 20:52
DB
트랜잭션 Atomic (원자성) 모든 작업이 실행되거나 모두 실행되지 않아야 한다. ex) 송금 과정에서 중간에 오류가 날 수 있으므로 A계좌의 잔액이 줄어드는 것과 B계좌의 잔액이 늘어나는 것은 모두 실행되거나 모두 실패해야 한다. Consistency (일관성) 모든 트랜잭션이 종료되고 데이터를 저장하는 시점에 DB의 제약조건을 모두 지키고 있는 상태여야 한다. 위반하는 트랜잭션은 중단된다. Isolation (고립성) 각 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야한다. 격리성 레벨은 READ_UNCOMMITTED > READ_COMMITTED > REPEATABLE_READ > SERIALIZABLE 순서로 성능은 떨어지고 고립성은 증가한다. READ_UNCOMMITTED : 처리중인 트랜잭션의..

[JPA] @Entity / @Table / @Column / @Id 간단 개념만
2022. 8. 7. 19:58
스프링/JPA
import javax.persistence.*; @Entity @Table(name = "Account_Table") public class Account { @Id private Long id; @Column(name = "account_number") private String accountNumber; } @Entity 클래스를 엔티티로 설정한다. 즉, DB의 테이블로 간주한다. 해당 클래스 내에 선언된 객체들은 테이블에서 필드를 의미한다. 테이블 이름은 클래스명이 디폴트값이다. @Table 클래스 명과 다른 이름으로 테이블 이름을 지정할 수 있다. @Id 테이블의 primary key 컬럼으로 지정한다. @Column 객체명과 다른 이름으로 필드명을 지정할 수 있다. 괄호 안에 다음과 같은 것들..

[자바] lombok 라이브러리 - @Getter & @Setter
2022. 8. 3. 23:04
자바
어떤 값을 저장하고 꺼내오는 과정에서 getter와 setter를 필요로 하는 경우가 많다. 웹 프로젝트 작업 시에는 수많은 getter, setter만으로 이루어진 클래스도 필요로 한다. 물론 요즘 IDE에는 이를 생성해주는 단축키도 존재할만큼 잘 만들어져 있다. 하지만, 새로운 변수가 추가될 때마다 매번 getter, setter를 추가해야 한다는 점은 변하지 않는다. 심지어 변수명이 바뀌면 따라서 바꿔줘야하는 불편함이 있다. lombok 라이브러리에 있는 두 개의 어노테이션은 이런 불편함을 줄여주는 역할을 한다. @Getter & @Setter 클래스 이름 위에서 어노테이션으로 사용할 수 있다. import lombok.Getter; import lombok.Setter; @Getter @Sette..

[스프링] ExceptionHandler - 예외처리
2022. 8. 1. 16:11
스프링
ExceptionHandler 자바에서는 예외를 처리하기 위한 try catch 구문이 있다. 하지만, 우리가 스프링으로 넘어와서 웹 관련 프로젝트를 하게되면 예외를 처리해야되는 부분이 굉장히 많아질 수 있다. 그 경우, 모든 예외 상황마다 일일이 try와 catch로 감쌀 것인가? 그렇게되면 코드의 가독성 나쁠 수 있다. 스프링에서는 이러한 문제를 해결하기 위한 예외처리 방법이 있다. 어노테이션의 이름부터 ExceptionHandler, 예외처리다. ExceptionHandler 어노테이션을 사용하면 @Controller 혹은 @RestController로 지정된 클래스에서 특정 예외상황마다 처리방식을 우리가 지정해 줄 수 있다. 만약, 여기저기 흩어진 IllegalAccessException 예외가 ..

[스프링] Http 요청을 매핑하여 데이터 받기
2022. 7. 31. 18:28
스프링
Mapping 스프링 MVC 컨트롤 메서드를 선언하기 위한 어노테이션 몇 가지를 소개하겠다. @RestController 어노테이션을 통해 컨트롤러를 활성화할 수 있다. Json 형태로 키와 밸류값으로 이루어진 데이터를 받아서 반환해준다. 과거 @Controller를 사용할 때는 메서드마다 @ResponsBody를 선언해야 하는 불편함이 있었다. 1. GetMapping // @RequestMapping(value = "/login/{loginID}", method = RequestMethod.GET) // 각 매핑들은 RequestMapping을 사용해서 value, method값을 통해 데이터를 받을 수도 있다. @GetMapping("/login/{loginID}") public String get..

[자바] 함수로 파일 경로 가져오기 (getContextPath & getRequestURI)
2022. 7. 30. 00:12
자바
웹 프로젝트 작업을 할 때 JSP 와 Servlet 간 MVC 작업에서 파일의 경로를 가져와야 되는 일이 생긴다. 이 때 사용하는 함수 세 가지를 소개하겠다. 다음과 같은 주소가 있을 때, http://localhost:8081/mission/index.jsp 1. request.getContextPath : 프로젝트 Path를 가져온다. return : /mission 2. request.getRequestURI : 프로젝트와 파일 경로를 가져온다. return : /mission/index.jsp 3. request.getRequestURL : 전체 주소를 가져온다. return : http://localhost:8081/mission/index.jsp

[백준] 2606번 바이러스 문제풀이 (JAVA)
2022. 7. 21. 21:47
알고리즘
문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다. 어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수..

[자바] 부분 배열의 합 중 가장 큰 값 구하기 (분할 정복 알고리즘)
2022. 7. 20. 22:40
자바
위와 같은 배열이 있을 때, 부분 배열이 만들어지는 경우의 수는 빨간네모와 같은 영역을 가질 것이다. 우리는 이 문제의 해답을 분할 정복 알고리즘을 통해 구할것이다. 먼저 배열을 반으로 가르고 왼쪽, 오른쪽에서 각각 최대의 합을 갖는 부분 배열의 조각을 얻을 것이다. 여기서 구해지는 부분 배열은 처음에 잘랐던 중앙을 넘지 않는다. 그리고 마지막으로 전체 배열에서 중앙부터 좌,우로 뻗어나가며 가장 큰 합을 갖는 배열 조각을 얻을것이다. 이렇게 구한 배열 조각 중 가장 큰 합을 갖는 조각이 우리가 찾고자 하는 부분 배열이다. 이 방법은 재귀함수를 필요로 하는 만큼 코드를 이해하는 데 다소 어려울 수 있으니 그림으로 좀 더 살펴보고 짧은 코드와 주석으로 마무리하겠다. 1. LEFT 반의 반으로 배열을 쪼개면서..