이 영역을 누르면 첫 페이지로 이동
개발다이어리 블로그의 첫 페이지로 이동

개발다이어리

페이지 맨 위로 올라가기

개발다이어리

저만의 개발일지를 만들어가는 공간입니다.

분류 전체보기

  • 개발다이어리
JPQL에서 QueryDSL로 전환하기

JPQL에서 QueryDSL로 전환하기

2022.06.23
들어가기에 앞서 현재 프로젝트의 쿼리는 모두 JPQL로 작성하였다. 이 프로젝트가 JPA를 공부하고 처음해보는 프로젝트이라서 기본적으로 사용하는 표준 방법들을 사용해본 후에 더 수월하게 하는 방법들을 적용해가는 것이 내가 공부한 것을 더 확실하게 이해할 수 있다고 생각했다. JPA를 사용하면 QueryDSL을 사용하는 것이 필수라고는 이야기하지만 내가 그것을 직접 느껴봐야한다고 생각했고 솔직히 프로젝트를 시작하기 전에는 얼마나 크게 차이가 날려나 라는 생각도 했었는데 JPQL을 실제로 사용해보고 QueryDSL을 공부해보니 '진짜 엄청난 차이가 있구나' 라는 것을 느끼면서 전환을 결심했다. 혹시라고 QueryDSL에 대해서 잘 모르신다면 [JPA] - QueryDSL 사용이유와 사용방법을 참고하면 될 것..
QueryDSL 사용이유와 사용방법

QueryDSL 사용이유와 사용방법

2022.06.22
들어가기에 앞서 실무에서 사용하다보면 복잡한쿼리도 많아지고 동적쿼리도 피치못하게 사용해야하는 경우가 생기기 마련이다. JPQL로도 충분히 문제를 해결할 수는 있지만 복잡하고 손이 많이 갈 수 밖에 없는 형태가 되버린다. JPQL의 한계를 극복할 수 있는 대안 중 하나가 바로 QueryDSL이다. 단순히 쿼리를 작성하는 것이 아니라 쿼리를 자바코드로서 작성할 수 있게 해줌으로서 많은 것들을 극복하고 훨씬 더 편리하게 사용할 수 있게 되었다. 각자가 사용하는 환경에 따라서 설정방법이 달라질 수 있겠다. 필자가 사용하는 환경은 SpringBoot, Spring Data Jpa, gradle을 사용했다. QueryDSL을 사용하는 이유 QueryDSL을 사용하면 쿼리를 자바코드로 작성할 수 있게 된다. 처음 이..
스프링 설정 환경 분리

스프링 설정 환경 분리

2022.06.18
들어가기에 앞서 프로젝트를 만들게되면 결국 언젠가는 운영으로 배포를 해야될 때가 있다. 설령 혼자서 만드는 토이 프로젝트라고 할지라도 테스트를 위해서 또는 실제로 운영해보기 위해서 서버에 배포하게 될 것이다. 그런데 로컬에서만 사용하던 설정이 운영에서 그대로 사용되면 문제가 생길 수 있다. DB접근하는 Datasource도 다를 것이고 파일을 저장한다면 저장하는 파일경로도 다를 것이다. 이것 외에도 외부에 보여지면 안되는 중요한 정보들이 있을 수도 있다. 이러한 이유들 때문에 로컬에서 사용하는 설정파일과 운영에서 사용하는 설정파일을 분리하는 작업을 해보도록 하자. 필자가 사용한 환경은 IntelliJ, gradle, SpringBoot를 사용하고있다. 스프링부트 2.4버전 이전과 이후의 작성방법이 다르다..
스프링부트 gradle build 실패

스프링부트 gradle build 실패

2022.06.15
인텔리제이에서 스프링부트 프로젝트를 만든 후 ./gradlew build를 사용했는데 계속 에러가 나면서 build를 실패했다. 에러의 내용은 다음과 같다. 자바 컴파일 에러 Task :compileJava FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > invalid source release: 11 compileJava.... 사실 원래 자바 8을 사용하다가 11로 변경했는데 그게 문제라고 하는 것 같긴 했다. 그래도 설정파일에서 전부 11로 바꾸고 build.gradle도 11로 설정하고 그냥 스프링 띄우고 웹에서 사용하는 것은 이때까지 전혀 문제가 ..
스프링 시큐리티 적용 후 등록하지 않은 로그인화면 대처법

스프링 시큐리티 적용 후 등록하지 않은 로그인화면 대처법

2022.06.14
로컬로 접속시 등록하지않은 로그인 페이지가 나옴 서버를 실행한 후 로컬로 접속하기 위해서 들어갔는데 계속 만든적도 없는 로그인페이지가 나오면서 아이디와 패스워드를 입력하라고한다. 무슨짓을해도 방법이 없어서 인터넷을 찾아봤을 때 대부분의 글들이 오라클서버랑 겹치는게 아니냐 라는 내용이었는데 나는 오라클을 깔지도 않았다... 포트도 직접 닫아보고 하면서 몇시간동안 하다가 발견했다. 일단 문제는 SpringSecurity를 사용하면서 기본보안 인증이 적용되어 나타나는 화면이었다. 방법은 아이디 : user 비밀번호 : 서버 실행 시 콘솔창에 나옴 이거를 입력하면 된다. 해결되었다.
스프링 주입의 다양한 방법들

스프링 주입의 다양한 방법들

2022.06.13
개요 스프링은 스프링 컨테이너에 빈이 등록된 이후에 빈이 필요한 곳에 자동으로 주입하는 작업까지 해준다. 이 작업이 DI의 작업이고 이렇게 스프링이 모든 제어권을 가지고 가는 것을 IoC라고 하는 것이다. 스프링이 빈을 주입하는 방식은 다양하게 있다. 생성자 주입 수정자(setter) 주입 필드 주입 일반 메서드 주입 여러 방식들의 사용법과 장단점을 살펴보자. (1) 수정자(setter) 주입 setter를 직접 만들어서 주입받는 방식이다. public class MemberServiceImpl implements MemberService { private MemberRepository memberRepository; @Autowired public void setMemberRepository(Membe..
스프링 빈 등록의 다양한 방법들

스프링 빈 등록의 다양한 방법들

2022.06.09
개요 스프링은 빈을 직접 관리하며 필요 시 빈을 주입해주는 DI방식으로 동작한다. 스프링이 빈을 등록하는 방식은 어노테이션, xml등 여러가지 방법을 사용해서 할 수 있다. 하지만 지금은 대부분 어노테이션을 사용하는 추세이고 방식도 이 방식이 훨씬 편하기 때문에 어노테이션 방식으로 빈을 등록하는 방법을 알아볼 것이다. 어노테이션을 이용해서 빈을 등록할 때 여러가지 어노테이션들이 사용된다. @Bean : 메소드 레벨에서 빈으로 등록한다. @Configuration : 내부에 생성된 빈들이 싱글톤이 유지되도록 해준다. @Component : 클래스 레벨에서 빈으로 등록한다. @ComponentScan : 특정 지정한 경로 하위에 있는 @Component가 선언된 클래스들을 빈으로 등록해준다. (1) @Bea..
[3/3] Spring과 싱글톤 패턴 - @Configuration의 비밀

[3/3] Spring과 싱글톤 패턴 - @Configuration의 비밀

2022.06.07
개요 스프링은 스프링 컨테이너에 등록된 빈이 호출되면 해당 인스턴스 자체를 주는 것이 아니라 스프링에서 특별하게 만든 인스턴스를 반환한다. 이 인스턴스는 기존의 인스턴스를 상속받아 만들어졌으며 getClass를 통해 참조하고있는 클래스를 살펴보면 CGLIB라는 단어가 있는 것을 알 수 있다. 이것이 스프링이 만든 가상의 클래스라는 의미이다. new가 여러번 호출되는데 싱글톤이 유지된다? AppConfig예제를 살펴보자. @Configuration public class AppConfig { @Bean public MemberServiceImpl memberService() { System.out.println("call memberService");// 로그 return new MemberServiceI..
[2/3] Spring과 싱글톤 패턴 - 싱글톤 패턴의 주의점

[2/3] Spring과 싱글톤 패턴 - 싱글톤 패턴의 주의점

2022.06.06
개요 Spring이 제공하는 방식의 싱글톤 패턴은 많은 단점들을 없애주고 아주 효율적으로 사용할 수 있게 만들어준다. 하지만 이것을 사용함에 있어서도 주의해야 할 점이 있다. 실무에서도 한 번씩은 꼭 발생할정도로 중요하고 기억해야 할 내용이기에 잘 익혀두고 항상 주의해야 할 것이다. 싱글톤 패턴의 주의점 싱글톤 패턴은 하나의 인스턴스를 만들어서 여러 클라이언트 호출에 대응하는 방식이다. 이렇게 하면 인스턴스가 호출 때마다 생성되고 사라지는 것이 아니라 처음 생성된 하나의 인스턴스로만 대응할 수 있기 때문에 꽤나 효울적인 결과를 가져올 수 있다. 주의해야할 점은 싱글톤 패턴은 여러 클라이언트가 하나의 인스턴스를 공유해서 사용하기 때문에 인스턴스 내부에 값을 변경할 수 있는 여지를 주면 안된다는 것이다. 내..
[1/3] Spring과 싱글톤 패턴

[1/3] Spring과 싱글톤 패턴

2022.06.03
개요 싱글톤 패턴이란 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그렇기에 객체 인스턴스를 2개 이상 생성할 수 없도록 막아야 한다. private생성자를 사용해서 외부에서 임의로 new키워드를 사용하지 못하도록 막는 것이다. 싱글톤 패턴의 필요성 웹 서비스에 접속한 사용자가 특정 요청을 하면 서버에서는 요청을 처리하기 위한 객체가 생성된다. 비즈니스 로직을 처리하기 위한 객체가 있다면 이 객체가 생성될 것이다. 그런데 사용자 100명이 동시에 호출한다면? 1000명이 동시에 호출한다면? 해당 객체는 100개씩, 1000개씩 동시에 생성되고 삭제될 것이며 그에 따른 GC도 계속해서 동작하게 될 것이다. 싱글톤은 필요한 객체를 미리 내부에서 생성한 후 해당 객체를 외부에서 생성할 수..
Mockito를 사용한 단위테스트

Mockito를 사용한 단위테스트

2022.05.31
들어가기에 앞서 개발 시 테스트코드의 중요성은 깨달으면 깨달을수록 크게 느껴지게된다. 테스트코드는 크게 통합테스트와 단위테스트 2가지로 나뉘게 되는데 자주 실행시켜서 테스트해볼 수 있어야하는 만큼 가능하면 단위테스트로 작성하는 것이 좋을 것이다. 언어마다 테스트코드 라이브러리가 다양하게 있는데 자바에서 사용하는 라이브러리로 Junit5와 Mockito를 이용해서 테스트코드를 작성해보도록 하자. API만들기 먼저 테스트 할 API를 만들어야 한다. @PostMapping public String sign(@Valid @ModelAttribute("member") MemberSaveRequestDto dto, BindingResult bindingResult) throws IOException { if (b..
ExceptionResolver를 이용한 API예외 처리

ExceptionResolver를 이용한 API예외 처리

2022.05.25
들어가기에 앞서 개발을 하면 할 수록 점점 중요하게 느껴지는 것이 예외처리 인 것 같다. 처음 개발을 시작할 때는 만들어서 동작하는것이 중요했지만 이제는 작게 만들더라도 문제가 생기지 않도록 만드는 것이 중요하다 라는 것을 느끼고 있다. 예외에 따른 view를 호출하는 것은 어렵지 않다. 이미 스프링에서 간단하게 사용할 수 있도록 모든 세팅이 되어있고 개발자는 간단하게 사용하기만 하면 된다. 하지만 API예외는 많이 신경을 써야한다. 단순히 에러코드나 에러종류에 따라서 veiw를 보여주는 것과는 다르게 API종류마다, 예외마다 다른 방식으로 보여줘야 하기 때문이다. view와는 다르게 json으로 반환해줘야 하는 경우도 있을 것이다. 결국 내부적으로 어떻게 할지 정하고 정한대로 만들어주면 되기때문에 각자..
  • 최신
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 다음

정보

개발다이어리 블로그의 첫 페이지로 이동

개발다이어리

  • 개발다이어리의 첫 페이지로 이동

검색

메뉴

  • 홈
  • Github
  • 방명록

나의 외부 링크

카테고리

  • 분류 전체보기 (66)
    • Spring (19)
      • MVC (7)
      • Boot (3)
      • Core (8)
      • Security (1)
    • Java (1)
    • 네트워크 (7)
    • JPA (6)
    • IntelliJ (2)
    • Database (1)
      • h2 (1)
      • postgreSQL (0)
    • 토이 프로젝트 (5)
      • 여행일지작성 (5)
    • 에러모음 (7)
    • 테스트코드 (2)
    • Git (8)
    • Nginx (2)
    • AWS (1)
    • 책 리뷰 (1)
    • Kotlin (2)
    • 회고 (1)
      • 24년도 회고 (1)
    • API문서 (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 연관관계 매핑
  • 단방향 매핑
  • 네트워크 #TCP #IP #인터넷 통신
  • 테스트코드 실행안됨
  • JPA
  • http 헤더
  • HTTP상태코드
  • HTTP

정보

ssung의 개발다이어리

개발다이어리

ssung

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © ssung. Designed by Fraccino.

티스토리툴바