본문 바로가기
관리자

Programming-[Backend]

(394)
[TIL] [패턴] 회원 활성화/비활성화, 수정 비즈니스 로직 구현 1. 구현 대상 회원 또는 활성화/비활성화 및 수정 비즈니스 로직이 필요한 경우. 예를 들어 아래와 같은 엔티티가 있다고 가정한다. 2. 구현 방식 2-1. Controller 수정을 목적으로 하므로, @PutMapping 처리를 해준다. 프론트 쪽에서 "v1/member" 주소로 MemberChangePo를 Http의 Body로 던져주고, Service에서 changeMemberInfo 메소드를 실행한다. 2-2. Service 여기가 패턴의 핵심이다. DB에서 어떤 객체의 Id값이 0일수 없으므로, id가 0일 때는 새로운 객체를 생성하도록 한다. -> 210604 수정 : id == 0 으로 하되, null 일때의 방어 로직이 있어야 한다. 생성된 엔티티의 필드값들을 Po로 입력받은 값들로 정의하고..
[스프링 기초] 4. 예제 만들기 1. creature 패키지 1-1. Grade Enum NORMAL과 ENDANGERED 속성을 만든다. 1-2. Creature 클래스 Creature 클래스를 만든다. 이 클래스는 필드로 id, name, grade를 갖는다. 생성자와 getter, setter를 만들어준다. 2. Repository 생물들에 대한 정보를 저장할 수 있는 Repository를 만든다. 원래는 Database에 Table을 만들어 정보를 저장하는데, 해당 강의에서는 다루지 않는 범위이므로 여기서는 Map 객체로 메모리 저장소를 만든다. 인터페이스 정의 interface 형태로 creatureRepository를 만든다. 생물들의 정보를 저장할 수 있는 save, 조회할 수 있는 findById 메소드를 만든다. 위에서..
[스프링 기초] 3. 프로젝트의 구조 및 생성 1. 예시 프로젝트 구조 김영한님의 강의를 그대로 따라하는 것보단, 조금 내용을 바꿔가며 학습해야 생각을 하면서 학습할 수 있을 것 같다. 강의에서는 회원들의 정보를 다루는 도메인을 예시로 든다. 이와 유사하게 동물원을 만든다고 생각하고, 동물원에 포함된 생물들(Creature)을 관리하는 도메인을 만들어보자. 구조는 아래 그림과 같이 강의 내용과 동일하다. Service와 Repository는 기본적으로 Interface 형태로 만든다. 여기서 핵심은, 객체를 interface로 만들어서 다형성을 활용하여 코드의 변경이 용이하게 한다는 점이다. CreatureRepository를 상속받는 구현체가 CreatureRepositoryAnimals가 되든, CreatureRepositoryPlants가 되든..
[TIL] BeanUtils.copyProperties, 엔티티 객체 복사하기 1. 용도 특정 객체의 필드값들을 복사한 새로운 엔티티를 반환해준다. 이런 기능을 사용하지 않으면 같은 객체를 만들기 위해서 모든 필드값을 일일이 set해줘야하는데, 이런 불편함을 해결해준다. 2. 사용법 파라미터로 기존 엔티티(originEntity), 복사할 엔티티(targetEntity), 복사안할 필드값("id")를 차례대로 작성해준다. 추가 참조1에 따르면, 기존 엔티티(source)에는 Getter가 필요하고, 복사할 엔티티(target)에는 Setter가 있어야한다고 한다. 해당 메서드의 스펙이 그렇다. 참조 참조1) https://zzang9ha.tistory.com/304
[TIL] ENUM 값 정의하고 불러오기 1. 정의 클래스를 정의하듯이, 'public enum 이름' 으로 정의한다. 상단부에 ENUM의 이름을 대문자로 적고, 속성값으로 필드값들을 정의한다. 생성자와 Getter를 작성한다. 2. 사용 ENUM으로 정의한 모든 value들을 return 하기 위해서 Arrays.stream(ENUM 이름.values()).map() 메서드를 활용한다.
[TIL] [에러] 파라미터 (Parameter Object) 값 null 문제 1. 현상 아래와 같이 컨트롤러에서 파라미터로 PO를 받아오는데, 디버깅 시에 받아온 값들이 모두 null로 표기되었다. 2. 원인 PO 쪽에 @Setter 어노테이션이 없었다. 정확한 원리는 잘 모르겠으나, http의 파라미터로 받아온 값을 객체로 변환해주는 기반이 Setter를 통해서 이루어지는 것으로 추정된다. 3. 해결 PO 클래스에 @Setter 어노테이션을 추가해주었다.
[TIL] @RequestBody, http의 파라미터를 Body로 넘기기(feat. 컨트롤러 테스트), MockMvc, Gson 컨트롤러 테스트를 할 때, Parameter 값을 아래와 같이 MockMvc의 .param으로 넘겨주었다. 컨트롤러 정의 부분 컨트롤러 테스트 부분 그러나 Put이나 Post의 경우에는 @Valid 뒤에 @RequestBody를 붙여주어서 http의 Body에 PO 입력값을 담아서 보내주었다. 즉, @RequestBody는 http의 Parameters = { } 로 파라미터를 전달하는 것이 아니라, Body = { }에 body값을 전달한다는 의미가 된다. 이렇게 설정하면 아래와 같이 컨트롤러 테스트 부분도 변경하여 MockMvc의 Content 부분에 Json 타입을 넣어주면 된다. 이 때, Gson 객체로 PO를 Json으로 바꿔주도록 한다. String TestJsonBody = new Gson(..
[스프링 기초] 2. 객체 지향 프로그래밍의 특징. 자바 스프링 1. 객체 지향 프로그래밍이란 프로그램은 행사나 연주회 등에서 "XXX 프로그램" 이라고 말하는 것처럼, 작성해놓은 코드가 한 줄씩 차례대로 실행되는 순차적인(절차적인) 방식으로 동작한다. 절차지향 프로그래밍이란, 이런 프로그램의 기본적인 특성에 맞춰서 하나의 파일을 순차적으로 실행되도록 구성하는 것을 말한다. 그러나 객체 지향 프로그래밍은 단순히 한개의 파일에서 순서대로 작성해놓은 코드가 실행되도록 하는 것이 아니라, 여러 개의 독립된 단위, 즉 "객체" 들의 모임으로 프로그램을 바라보는 시각을 말한다. 자바에서는 클래스나 인터페이스 파일들이 객체라고 할 수 있겠다. 이렇게 생성된 객체들은 서로 데이터를 주고받으며 동작한다. 객체들끼리 데이터를 주고 받으며 작동하는 프로그램을 만드는 이유는, 프로그램을..