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

개발다이어리

페이지 맨 위로 올라가기

개발다이어리

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

분류 전체보기

  • 개발다이어리
[Error] Mockito를 사용한 단위테스트(form데이터 전송)

[Error] Mockito를 사용한 단위테스트(form데이터 전송)

2022.05.17
SpringBootTest를 이용한 통합테스트 위주의 테스트코드를 작성하다가 단위테스트도 해봐야겠다는 마음으로 컨트롤러는 단위테스트로 작성하기로 했다. 아직 한 번도 해본적이 없어서 인터넷으로 찾아보고 다른 사람들 코드 찾아보면서 작성해보기로 했다. Junit5를 사용하였고 아래의 코드와 같이 사용하였다. @ExtendWith(MockitoExtension.class) class MemberControllerTest { @InjectMocks MemberController memberController; @Mock MemberService memberService; MockMvc mockMvc; private final String baseUrl = "/member"; @BeforeEach void be..
쿠키 사용하기

쿠키 사용하기

2022.05.08
HTTP는 기본적으로 '무상태'라는 특징이 있기 때문에 클라이언트가 서버로 전송한 데이터를 소유하지 않는다. 그렇기 때문에 클라이언트는 서버가 자신을 기억해주기를 바란다면 매번 자신의 인증정보를 서버에 전송해야 할 것이다. 이것은 개발자 입장에서도 매우 번거롭고 어려운 작업이 될 것이다. 이런 문제를 해결하기 위한 방법이 '쿠키'이다. 쿠키는 key, value로 이루어져 있으며 서버에서 쿠키를 만들어서 클라이언트에 보내면 클라이언트가 서버에 요청할 때 매번 쿠키를 함께 보내게 된다. @GetMapping("/") public String home() { Cookie cookie = new Cookie("userId", "1");// 쿠키 생성(key, value) return "home"; } 쿠키의 ..
[Error] JPQL에서 엔티티조인 후 내부의 엔티티 조회

[Error] JPQL에서 엔티티조인 후 내부의 엔티티 조회

2022.05.03
JPQL은 일반적인 SQL문이랑 미묘하게 다른점들이 있다. 물론 쿼리를 잘 짜는 사람이라면 JPQL도 금방 익숙해질 수 있겠지만 문제는 익숙해지는 과정에 있을 수 있다. 기본문법을 숙지하고 사용한다고 한들 응용영역에서 에러를 만나면 삽질을 할 수 밖에 없기 때문에... 바로 나처럼 3개의 엔티티가 사용되었고 2개의 엔티티를 조인한 후 조인된 엔티티에 속해있는 다른 엔티티를 조건으로 조회하는 방법이다. 먼저 엔티티 코드이다. 예제를 위한 내용만 입력하겠다. @Entity public class Share extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "share_id") privat..
[Error] TransientPropertyValueException에러..

[Error] TransientPropertyValueException에러..

2022.05.02
개발은 에러의 무한반복.. 에러라는 쳇바퀴를 돌리는 한 마리의 헴스터.. 프로젝트를 진행하던 중에 에러를 만났다. TransientPropertyValueException에러였는데 하이버네티스에서 나온 에러이다. 에러의 원인은 두 엔티티를 매핑시키고 데이터를 넣는 중에 영속성 컨텍스트에 들어가지 않은 객체를 연관관계 주인에 넣을려고 해서 발생한 에러였다. 말로하면 너무 어려우니 코드를 살펴보자. Image image = new Image(); Member member = new Member(); member.setImage(image); memberRepository.save(member); 에러부분에만 집중하기 위해서 아주 간단하게 표현했다. 이미지는 프로필이미지 하나만 저장하기 때문에 1:1의 관계이..
[Error] Form태그 안에 버튼이 있다면 버튼의 역할은?

[Error] Form태그 안에 버튼이 있다면 버튼의 역할은?

2022.04.21
웹 페이지에서 작성한 내용을 서버로 보내기 위해서 form태그를 많이 사용한다. form태그를 이용하면 원하는 정보들을 HTTP요청 메세지에 담아서 서버로 전송할 수가 있다. 그리고 form태그를 사용하기 위해서는 전송버튼을 사용할것이다. 이때까지 아무생각없이 사용했었는지 이런 경우를 처음 경험해보고 아마 나처럼 뭐지... 하는 사람이 있을것같아서 글을 남긴다. form태그안에 버튼을 사용하면 전송버튼의 type을 submit으로 설정해서 사용한다. 그런데 form태그안에 버튼이 여러개가 있을 수가 있다. 아이디 중복체크 등... 이런 경우에 버튼 type에 아무설정하지 않으면 default타입으로 submit이 설정이 된다...! 중복체크 중복체크 위의 두 코드는 같은 경우인 것이다. 만약 submit..
스프링 MVC 밑바닥부터 만들어보기6 - 어댑터 패턴을 이용한 유용한 컨트롤러

스프링 MVC 밑바닥부터 만들어보기6 - 어댑터 패턴을 이용한 유용한 컨트롤러

2022.04.20
V4까지 만든 프로젝트로 이제는 개발자가 편리하게 사용할 수 있는 형태로 완성되었다. 그런데 만약에 개발자가 다른 버전의 컨트롤러를 사용하고 싶다면 어떻게 해야할까? 지금까지 만든 것은 프론트 컨트롤러에서 특정 버전의 컨트롤러를 지정해서 사용하고있었다. 만약 V4를 사용하다가 V3를 사용하고 싶다면 지금의 상황에서는 변경이 불가능하다. 이 불가능을 해결하기 위해서 어댑터 패턴을 도입해보고자 한다. 만약 우리가 110V짜리에 220V를 사용할려고 하면 전압이 맞지 않기 때문에 사용 할 수 없을 것이다. 이것을 해결하기 위해 어댑터를 이용해서 전압을 맞춰서 사용해주어야 한다. 이것처럼 서로 다른 2개를 연결시키기 위한 방법을 어댑터 패턴이라고 부른다. 이번에는 이 어댑터를 도입시켜서 V3와 V4중 어떤것이 ..
스프링 MVC 밑바닥부터 만들어보기5 - 서블릿 종속성 제거, Model분리

스프링 MVC 밑바닥부터 만들어보기5 - 서블릿 종속성 제거, Model분리

2022.04.20
이번에는 서블릿 종속성을 제거해보자. 지금은 컨트롤러들이 모두 request와 response를 강제로 받아서 사용하고있다. 꼭 사용하지 않는 컨트롤러도 있고 심지어 response는 거의 사용하지 않는데도 불구하고 서블릿에 종속되있어서 어쩔 수 없이 파라미터를 넘기고 받아서 처리하고있다. 이 부분을 수정해서 request, response가 아니라 http요청데이터에서 넘어온 파라미터를 담은 map을 컨트롤러가 받아와서 처리하도록 변경할 것이다. 그리고 view의 호출방식도 변경할 것이다. 각 컨트롤러에서 jsp의 주소를 모두 넘겨주고 있는데 이렇게 됐을 때 만약 jsp의 패키지 주소가 변경되었을 경우 모든 컨트롤러를 수정해야하는 일이 발생한다. 그렇기 때문에 컨트롤러에서는 논리 뷰 이름만 넘겨주고(j..
스프링 MVC 밑바닥부터 만들어보기4 - 프론트 컨트롤러와 view의 분리

스프링 MVC 밑바닥부터 만들어보기4 - 프론트 컨트롤러와 view의 분리

2022.04.14
프론트 컨트롤러는 개별적인 컨트롤러에 들어가기전에 가장 먼저 들어오게되는 컨트롤러이다. 프론트 컨트롤러를 사용한 방식을 '프론트 컨트롤러 패턴' 이라고 부르는데 스프링 MVC도 프론트 컨트롤러 패턴으로 구성되어있다. 가정먼저 프론트 컨토를러의 구조를 만들어보고 그 이후에 세세한 부분들을 바꿔가면서 진행해보도록 하겠다. 전반적인 구조는 프론트 컨트롤러, 컨트롤러 인터페이스, 컨트롤러로 짜여질 것이다. 요청의 흐름을 먼저 살펴보자면 이런 흐름으로 처리 될 것이다. 패키지는 package hello.spring_mvc_study.web.frontcontroller.v1 에서 진행될 것이고 버전이 바뀔때마다 v1이라는 패키지명만 변경될 것이다. JSP는 앞에 만들었던 파일을 그대로 사용할 예정이다. Contro..
스프링 MVC 밑바닥부터 만들어보기3 - MVC패턴의 시작

스프링 MVC 밑바닥부터 만들어보기3 - MVC패턴의 시작

2022.04.14
서블릿과 JSP를 단독으로 사용해서 코드를 작성하게 되면 하나의 파일이 너무 많은 일을 수행하게 되버린다. 이렇게 되면 유지보수도 어려워질 뿐더러 작업의 프로그램의 효율도 떨어질 수 있다. 이러한 문제를 극복하기 위해서 MVC패턴이 등장하게 되었다. MVC패턴은 Model, View, Controller로 역할을 구분해서 사용하는 방식이다. Model : View에 출력할 데이터를 담아두고 있는다. View : html과 같이 화면을 담당하는 코드이다. 모델에 담겨있는 데이터를 활용할 수 있다. Controller : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. View에 전달할 데이터를 모델에 담는다. Controller는 요청을 처리해 주는 역할이 주된 역할이기 때문에 그 ..
스프링 MVC 밑바닥부터 만들어보기2 - 서블릿과 JSP

스프링 MVC 밑바닥부터 만들어보기2 - 서블릿과 JSP

2022.04.11
이제부터는 간단하게 회원을 저장하는 기능와 조회하는 기능을 만들어볼려고 한다. 먼저 member클래스를 만들어준다. @Getter @Setter public class Member { private Long id; private String name; private int age; public Member() { } public Member(String name, int age) { this.name = name; this.age = age; } } 롬복을 이용해서 getter와 setter를 받았다. id값은 테이블의 pk값의 용도로 사용할 것이기 때문에 생성자에서 받지 않고 자동증가 방식으로 입력할 것이다. 다음은 기능을 수행할 repository를 만들어주자. public class MemberRe..
스프링 MVC 밑바닥부터 만들어보기1 - 서블릿 탐구하기

스프링 MVC 밑바닥부터 만들어보기1 - 서블릿 탐구하기

2022.04.11
흔히들 사용하고있는 SpringMVC는 많은 과정들을 거치면서 발전해 온 결과물이다. HTTP를 이용한 전송을 하는 웹 애플리케이션에서 어떻게 HTTP를 잘 활용하며 사용할 수 있을까를 고민해서 **서블릿**이 만들어졌다. 이 이후에 효울적인 개발을 위한 디자인 패턴으로 MVC패턴이 나오게 되고 Spring에서 이 패턴을 이용한 SpringMVC를 만들게 된 것이다. 무작위로 사용하던 SpringMVC가 어디서부터 어떻게 만들어졌으며 어떻게 동작하는지를 깊게 이해하고 사용하기 위해서 이 프로젝트를 진행한다. 아무 세팅도 없는 완벽한 기본부터 하면 더 좋겠지만 지금의 기술을 완전히 무시하는 것도 비효울적이라는 생각도 어느정도 들기에 기본 세팅을 SpringBoot를 이용한 세팅으로 진행하고자 한다. 물론 ..
연관관계 매핑(단방향)

연관관계 매핑(단방향)

2022.04.09
객체와 RDB는 분명 다른방향으로 동작하게 되있다. 서로 다른 패러다임을 가지고있는 객체와 RDB를 같게 만드는 것은 아무리 ORM을 사용한다고 하더라도 머리로 이해하는 것이 쉽지 않을 것이다. JPA를 이용하여 객체와 RDB를 연결하기 위해서 몇 가지 용어를 이해해야한다. 방향 : 단방향, 양방향 다중성 : 다대일(N:1), 일다대(1:N), 일대일(1:1), 다대다(N:M) 연관관계의 주인 : 객체 양방향 연관관계는 관리주인이 필요 이러한 용어들을 가지고 연관관계 매핑에 대한 이해를 시작해보자. Member와 Team을 매핑한다고 생각해보자 @Entity class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = ..
  • 최신
    • 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)

최근 글

인기 글

댓글

공지사항

아카이브

태그

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

정보

ssung의 개발다이어리

개발다이어리

ssung

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

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

티스토리

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

티스토리툴바