본문 바로가기

java11

JPA 영속성 컨텍스트는 어떻게 사용되는가 들어가기 예전에 JPA를 Spring Data JPA를 통해 다루면서 repository.save()를 할 시 반환 값으로 Primary Key 값이 포함된 객체를 반환하는 것에 의문이 생겼던 적이 있다. auto_increment 전략을 사용하기에 DB에 데이터가 들어간 이후에 Primary Key가 정해지기 때문이다. DB에 접근하기 전 영속성 컨텍스트에 데이터가 있으면 DB를 조회하지 않고 영속성 컨텍스트에서 데이터를 조회한다. 그리고 데이터를 저장 시 영속성 컨텍스트에 '쓰기 지연'이라는 기능 덕분에 INSERT 문을 모아두었다가 트랜잭션이 끝났을 때 한꺼번에 DB로 전송하도록 되어 있다. 그렇다면 repository.save()를 할 경우 inesrt 문은 트랜잭션이 끝났을 때 실행될 텐데 어떻.. 2024. 1. 14.
sprigboot 프로젝트 진행중 리펙토링 적용 개발을 하는데 있어서 가장 중요하고 자주하는 것이 리펙토링이라 들었다. 지금 작성한 코드가 다른 사람이 볼때 충분히 가독성이 있을지, 객체지향적인 방식을 잘 활용하고 있는지를 확실치 못하고 있었다. 면접을 위한 cs전공지식노트(주홍철)에서 디자인 패턴 중 펙토리 패턴과 전략 패턴에 대해서 적용해보고자 리펙토링을 하게 되었다. 위 패턴들을 적용하려는 이유는 현재 진행중인 프로젝트 중 findArticles가 하나의 메서드로 되있지만 public, private, grouped에 따라 구분을 해야한다. 하나의 메서드로 3개를 경우에 따라 구분을 하는 것보다는 3개의 메서드로 가독성을 향상시키는 것이 좋다고 생각하였기 때문이다. 하지만 이 패턴들을 findArticleService에 막연히 적용하기에는 상당히.. 2023. 4. 1.
스프링부트 - 인터셉터(Interceptor) 스프링 프로젝트를 진행하다 보면 controller에 접근전 공통적으로 처리해야 하는 로직이 있었을 것이다. controller로 이동하기 전에 로그인 정보를 확인한다든지, 보안토큰, 불필요한 파라미터나 파일 등을 전송 중인지 미리 확인하면 좋은데 이러한 상황에서 사용하는 것이 필터와 인터셉터이다. 필터와 인터셉터는 비슷한 기능을 하지만 차이가 존재한다. 아래 사진을 봐보자. 위 사진과 같이 스프링 프로젝트에서 요청이 와서 스프링 MVC를 사용하고 DispatcherServlet에 앞에서 처리를 하면 필터이고 뒤에서 처리하면 인터셉터이다. 아래는 좀 더 필터와 인터셉터의 구체적인 부분들이다.(출처: https://velog.io/@ansalstmd/%EC%8A%A4%ED%94%84%EB%A7%81%EB%.. 2022. 3. 6.
스프링부트 AOP에 대한 기본 정리 스프링의 여러 장점이 되는 특징들이 있고 그중 하나이 AOP에 대해 간단히 정리해 보고자 한다. 좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다'이다. 대부분의 시스템이 공통으로 가지고 있는 보안, 로그 , 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 한다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다. AOP(Aspect-Oriented Programming)는 '관점 지향 프로그래밍'이라는 의미이고 '관점(Aspect)'이라는 용어는 개발자들에게는 '관심사(concern)'라는 말로 통용된다. 관심사는 핵심 로직은 아니지만, 코드를 온전하기 위해 필요한 것들이.. 2022. 2. 28.
스프링부트 MyBatis를 이용하여 MySQL 연동 및 동적쿼리 개발자들은 데이터 베이스에 데이터를 유지하기 위해 JDBC를 이용하여 데이터베이스에 접근하였다. JDBC의 복잡함을 단순하게 하게 위해 Persistence FrameWork를 사용했는데 ORM 프레임워크와 SQL 매퍼이다. ORM 프레임워크는 SQL 코드를 직접 작성하지 않고 자바에서 객체지향적인 방식으로 데이터를 객체로 다루면 이를 관계형 데이터베이스에서 작업할 때 SQL로 변환하여 연동을 할 수 있도록 하는 것이다. 즉 SQL을 직접 작성할 필요가 없는 것이다. 데이터베이스에 종속성이 약해서 바뀌더라도 바로바로 적용 가능하다. 대표적으로는 Hibernate가 있고 이에 대한 표준 기술 명세가 JPA이다. MyBatis는 ORM 프레임워크라고 말하지는 않고 SQL 매퍼라고 한다. 객체와 관계형 데이터.. 2022. 2. 25.
스프링 MVC에 대한 간단 정리 스프링 프레임워크로 웹 개발을 하면서 많이 본 용어는 스프링 MVC라는 용어이다. 스프링 프로젝트를 생성할 때 spring web라는 라이브러리를 추가했었는데 spring mvc를 사용할 수 있도록 하는 것이라고 한다. 그저 프로젝트를 생성할 때 자동으로 쓰는 것이었지만 도대체 이 spring mvc라는 것은 무엇인지 확실히 알아보고자 한다. 이 글에서는 '코드로 배우는 웹 프로젝트 - 구멍가게 코딩단'을 읽고 스프링 MVC에 대해 간단하게 정리하여 쓴 글이다. 우선 가장 기억해야 할 점은 스프링 MVC가 스프링의 서브 프로젝트라는 점이다. 스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아니라 '코어'라고 할 수 있는 프레임워크에 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발.. 2022. 2. 9.
JPA 양방향 연관관계 일 때의 저장 및 연관관계 편의 메서드 연관관계를 일대다, 다대일로 데이터를 다루는 경우가 많다. 만약 한 엔티티에서만 일대다, 다대일을 설정하면 단방향 연관관계이고 두 엔티티 모두 다대일, 일대다 설정을 한다면 양방향 연관관계이다. 양방향 연관관계를 할 때 외래 키 설정이 제대로 안된 경우가 있을 수 있는데 아래의 간단한 예시 코드를 보며 살펴보자. @Entity class Member { ... @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; ... } @Entity class Team { ... @OneToMany(mappedBy = "team") private List members = new ArrayList(); ... } 위와 같이 Member 과 Team은 다대일 관계이며 .. 2021. 12. 14.
자바기본개념 - 자바가상머신 및 가비지 컬랙션 이 글은 자바 프로그래밍 면접 이렇게 준비한다(노엘 마크엄) 및 여러 블로그들을 참고하며 간단한 부분들만 정리한 글이다. 자바 가상머신(JVM)은 프로그램이 실행되는 플랫폼이다. 플랫폼은 여러가지 기능을 제공해주는 실행환경이다. 자바 컴파일러는 .java파일을 .class 라는 Java Byte Code로 컴파일한다. 이 바이트코드는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이때 JVM은 OS에 맞게 해석해 주는 역할을 한다. 여기서 다른 컴파일 언어와의 차이점은 JVM은 운영체제와 애플리케이션 사이에 위치하면서 애플리케이션이 플랫폼에 상관없이 독립적으로 실행될 수 있도록 만들어 준다. 즉, OS에 상관없이 실행한다는 것이다. JVM은 모든 중요한 애플리케이션 개발에서는 애플리케이션이 JV.. 2021. 10. 22.
JAVA - Class 객체의 ArrayList 다중 정렬 ArrayList 를 class로 정의한 후 정렬 해야할 때 Comparator를 만들어서 정렬을 할 수 있다. 사용방식은 아래와 같다. private static class Meeting { private Long startTime; private Long endTime; public Meeting(Long startTime, Long endTime) { this.startTime = startTime; this.endTime = endTime; } public Long getStartTime() { return startTime; } public Long getEndTime() { return endTime; } } static class MeetingComparator implements Compa.. 2021. 9. 13.