본문 바로가기
반응형

전체 글322

[JPA Auditing] 생성/수정시간 자동화 보통 entity에는 언제 만들어졌는지, 언제 수정됐는지 등 유지보수를 위해 데이터의 생성/수정시간을 포함한다. DB에 삽입 전, 갱신 전 날짜 데이터를 등록/수정하는 코드가 여기저기 들어가게 되는 단순하고 반복적인 코드를 매번 작성하는게 번거롭고 코드가 지저분해진다. 이를 해결하기 위한 것이 JPA Auditing이다. 시간을 구하는데 Date, Calendar, LocalDate 등 여러가지가 있다. 이슈 - Date와 Calendar는 몇 가지 문제가 있었는데, Java 8에서는 이를 개선하며 LocalDate가 등장했다. ( yeonyeon.tistory.com/24?category=916856 참고) - LocalDate와 LocalDateTime이 db에 제대로 매핑되지 않는 이슈가 있었는데 .. 2021. 1. 18.
[JPA] 더티 체킹 (설명만 보려면 게시글 아래로) 게시글을 수정하는 코드를 작성하고 있다. 순서대로 Controller와 Service 코드의 일부이다. @PutMapping("/api/v1/posts/{id}") public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto) { return postsService.update(id, requestDto); } @Transactional public Long udpate(Long id, PostsUpdateRequestDto requestDto) { Posts posts = postsRepository.findById(id) .orElseThrow(() -> new Illega.. 2021. 1. 18.
[Spring] 등록 API 만들기 (+h2 웹 콘솔 이용하기) API 생성을 위한 클래스 1. Dto : Request 데이터 받기 2. Controller : API 요청 받기 3. Service : 트랜잭션, 도메인 기능 간의 순서 보장 Service에서 비즈니스 로직을 처리해야 한다고 오해하기 쉬운데, 트랜잭션과 도메인 간 순서만 보장하면 된다. Spring 웹 계층 Web Layer - Controller와 View Template 영역 - 필터, 인터셉터, @ControllerAdvice 등 외부 요청과 응답에 대한 전반적인 영역 Service Layer - @Service - 보통 Controller와 Dao의 중간 영역 - @Transactional이 사용되어야 하는 영역 Repository Layer - DB 같은 데이터 저장소에 접근하는 영역 - D.. 2021. 1. 15.
[Eclipse] war 파일 lib 폴더가 없을 경우 war 파일 내부에 /WEB-INF/lib 안에 일부 jar 파일만 필요한 경우였다. export 했던 war 파일을 압축 해제만 하면 되는데 lib 폴더 자체가 없었다. 프로젝트 우클릭 - properties - deployment assembly add 해서 연결된 프로젝트나 라이브러리 추가 위 방법이 안되면 아래 방법으로도 시도해볼 것 프로젝트 우클릭 - properties - java build path - order and export 체크하고 apply and close 2021. 1. 15.
역할, 책임, 협력 관점으로 객체지향 살펴보기 객체 : 상태, 행동, 식별자를 지닌 실체 - 상태: 특정 시점에 객체가 가진 정보의 집합. 객체의 구조적 특징을 표현. - 행동: 외부의 요청에 응답하기 위해 동작하고 반응하는 활동. - 코딩을 할 때 상태가 아닌 '행동'에 초점을 맞추는 것이 좋다. 행동이 상태를 결정한다. - 값은 불변 상태이지만 객체는 가변 상태이다. 행동을 통해 상태를 변경한다. ( ex: 이상한 나라의 앨리스에서 앨리스는 '케이크를 먹음'으로서 '키'라는 상태가 작아진다. ) - 자율적인 객체란, 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체다. 또한 객체에게 할당되는 책임이 자율적이어야 한다. 지나치게 추상적이거나 지나치게 구체적인 책임은 문제가 된다. - 책임이 자율적일 수록 적절하게 추상화되며, 응집도가 높.. 2021. 1. 15.
[Java] 시간 구하는 방법 비교 Java에서 현재 시간을 구하는 방법은 3가지가 있다. System.currentTimeMillis() new Date() Calendar.getInstance().getTime() System.currentTimeMillis()와 new Date()의 속도 자체는 크게 다르지 않다. 다만 Calendar.getInstance().getTime()의 경우에는 객체 생성부터 윤달 같은 여러 상황을 고려해 계산하기 때문에 상대적으로 느리고 복잡하다. 또한, 10월의 숫자가 '9'이기 때문에 혼란을 야기한다. System.currentTimeMillis()는 객체를 만들지 않고 new Date()는 GC를 이용한다는 점에서 분명 System.currentTimeMillis()가 더 우수한 성능을 보인다. (G.. 2021. 1. 14.
eclipse 단축키 기능 단축키 선택 라인 위/아래로 복사 ctrl+alt+↑, ↓ 선택 라인 위/아래로 이동 alt+↑, ↓ 키워드가 포함된 파일들 찾기 ctrl+H 파일명으로 파일 찾기 ctrl+shift+R jar 파일 안에 존재하는 class 파일 찾기 ctrl+shift+T 현재 열려있는 파일에서 키워드 찾기 ctrl+F 함수를 호출하는 함수 찾기 ctrl+shift+G 선택 라인 삭제 ctrl+D getter/setter 자동 생성 alt+shift+S -> R 현재 위치 ~ 다음 줄 이전까지 내용 삭제 ctrl+shift+Delete 줄 맨 앞으로 이동 Home 줄 맨 뒤로 이동 End 선택 라인 주석 추가/제거 ctrl+shift+C /* */ 추가 ctrl+shift+/ /* */ 제거 ctrl+shift+.. 2021. 1. 13.
[Spring] JPA로 database 다루기 JPA를 사용하는 이유? 우리 회사는 현재 MyBatis + SQL Mapper를 통해 db를 다룬다. SQL을 다루는 시간이 꽤 길고 단순 반복 작업을 반복하게 되는데 '객체지향'과는 약간 거리가 있는 느낌이다. JPA는 이런 SQL에 종속적인 개발을 피하기 위해 나온 것으로, Springboot + JPA 조합을 사용하는 기업들이 늘고 있다. JPA란? : 인터페이스로서의 자바 표준 명세서. - 인터페이스인 JPA 사용을 위해 구현체가 필요한데 Hibernate, Eclipse Link 등이 있으나 Spring에서는 이를 직접 다루진 않는다. 구현체들을 좀 더 쉽게 사용하고자 추상화시킨 Spring Data JPA를 이용하는데, JPA 2021. 1. 11.
짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습니다. str re.. 2021. 1. 11.
반응형