본문 바로가기

MVC18

WebFlux는 무엇이고, 왜 나왔고, 언제 쓰이는가? 어제 Cart API 코드 리팩터링을 마무리하고, 리뷰를 받기 위해 PR을 올렸다. 클린 한 코드로 작성하려고 노력하기 위해 리뷰어님이 주신 의견을 되뇌고, 클린 코드를 작성하기 위한 방법을 구글링을 통해 하루 종일 모니터를 노려보며 클래스 간 책임을 나누어 보았다. 빨리 성장하고 싶다!! 리뷰를 앞두고, 카카오페이를 이용한 도메인 코드들을 리팩터링 하기 앞서, 기존에 외부 API와 통신하기 위해 사용하던 템플릿인 RestTemplate의 대체 여부에 대해 떠올랐다. RestTemplate은 deprecated 되었으므로, WebClient의 사용을 고려해보라는 의견을 받았다. WebClient에 대해 알아보다가 동기/비동기, 블로킹/논블로킹이라는 개념의 정의에 대해 다시 공부하게 되었고, 나아가 Web.. 2022. 8. 31.
2022.05.11 「SHA-256 + Salt & 인증」 인증 관련해서 사실 스프링 시큐리티를 사용해도 괜찮지만 순차적으로 가기 위해서 순수하게 SHA-256 암호화 알고리즘을 이용해 비밀번호 암호화와 로그인을 원시적으로 구현한 하루다.. 거진 12시간을 삽질한 것 같다. 암호화 알고리즘 이용과, Mybatis 매핑 문제도 있고, ModelMapper를 사용해 DTO VO 매핑이 계속 안되어서 하루 종일 멘털이 나갔었다. 다른 공부도 할게 너무 많은데 프로젝트만 비중이 많았던 하루라 너무 아쉽다. 하지만 삽질한 만큼 내 것이 되었으면 좋겠다. 오늘은 하루종일 삽질한 내용을 기반으로 한번 정리를 해보려고 한다. 여담으로 다이어트중인데 요새 상주하는 공부 환경에서 오트밀 미니 바이트를 제공해주는데 이거 진짜 너무 맛있다.. 예전엔 진짜 단 거 잘 참았는데 늙었나 .. 2022. 5. 11.
2022.05.10 「Rest Ful Api & DTO,VO mapping & Mysql Index & 상수화」 프로젝트를 진행 중에 수정사항이 너무도 많다는 것을 알게 되었다. 예전에 학원에서 프로젝트를 할 때는 어떻게 만들든 기한이 정해져 있었기 때문에 완성도가 우선이었고, 유지보수에 대한 프로그래밍에 신경을 쓰지 않았었다. 하지만 실제로 제대로 된 프로그래밍을 하다 보니 예전 버릇이 나오게 되었고, 이번 리뷰를 받은 김에 리팩터링을 빠르게 하며 정리를 해볼 생각이다. RestFul Api 의 return 값 1. 되도록 체이닝 하는 방식을 사용 2. response에 해당되는 헤더 메시지(상태 코드, 메시지 등등), 바디 값을 다 넣도록 노력하자 DTO, VO 간의 매핑 현재 Mybatis를 사용중이므로 테이블 자체의 Entity는 VO service mapper 계층 이동 시 VO를 이용해야 함 .. 2022. 5. 10.
2022.04.23 의 기록 ▶ 계획 1. Gradle test 코드 수정 2. 스프링 PSA 추상화 정리 ▷ test code 문제 : 게임 카운트 증가 테스트 시 계속 테스트 실패 원인 : 디버깅 해봤더니 계속 default 걸려서 보니까 switch문 break 추가 안함.. > 카운트 값 자체를 비교하는게 아니라 증가 여부만 판단했다. ▷ 스프링 PSA 추상화 > 스프링 내부 구현 클래스들이 추상화 되어 있는 이유? > PSA와 연관이 있다. > 서비스를 추상화함으로써 개발자가 실제 구현부를 알지 못하더라도 해당 기능을 사용할 수 있게된다. 즉, 추상화 계층인 인터페이스 API 의 정보를 활용해 해당 서비스의 모든 기능을 이용하면 되는 것이다. > 추상화 계층을 사용해 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공하는 .. 2022. 4. 23.
2022.04.22의 기록 ▶ 파트 1 (10시 ~ 7시) 1. Gradle Test 코드 수정 (PrintGameResult, ComputerNumber 부분) 2. 자소서 수정 3. Boot project 구상 4. Spring MVC 내부 개념 정리 5. 알고리즘 1문제 (2문제) 6. mysql Ch5. 트랜잭션, CH6. 데이터 압축 7. 이펙티브 자바 아이템 1 정리 ▷ 알고리즘 문제 : 정수의 내림차순 정렬 import java.util.Arrays; class Solution { public long solution(long n) { long answer = 0; String number = String.valueOf(n); String stringNum = ""; char[] numArr = new char[num.. 2022. 4. 22.
2022.04.20 의 기록 ▶ 오늘 하루 계획 파트 1 (11시 ~ 2시) 1. Gradle MVC 프로젝트 테스트 코드 리팩토링 2. Mysql 3단원 정리 파트 2 (3시 ~ 1시) 1. 스프링MVC 개념 정리 : 핸들러 추상클래스로 왜 이루어져 있는지 고민해보자 3개 2. 스프링부트 프로젝트 WIkI 정리 3. 노션 이력서 템플릿 및 초안 작성 4. 도커 2문서 5. 알고리즘 1문제 2022. 4. 20.
2022.04.16 의 기록 ▶ 주말 계획 1. SpringMVC 완강 2. Gradle test 프로젝트 intellij로 깃 연동 3. 스프링 대답 못한 질문 정리 4. 자기소개서 손 보기 ▶ 오늘 할 일 1. SpringMVC 8,90퍼센트 2. 깃 허브 연동 3. 파이널 프로젝트 3차 수정본 war 파일 강사님께 메일 전송 4. 프로그래머스 3개 풀기 2022. 4. 16.
2022-04-13의 기록 ▶ 지난 3주 -> 마지막 팀프로젝트인 파이널 프로젝트를 뒤늦게 시작하게 되어 수료 후에 2주를 더하게 되었다. 하필 전주에 코로나 양성 판정이 나는 바람에 컨디션이 좋지 않아 더 늦게 끝낸 것이 내심 아쉽다. 프로젝트는 거의 마무리 단계이며 오늘이나 내일중으로 war 파일을 강사님께 보내드릴 생각이다. 서버에 배포 후 에러 잡기가 완료된 후, 프로젝트에 대한 디테일한 부분들을 회고로 따로 작성하겠다. 오늘부터는 그 동안 하지 못했던 공부를 다시 시작할 생각이다. -> 그 동안 프로젝트로 인해 정신이 없고 하필 최근부터 자가격리를 하게 되어 집밖돌이인 내가 집에만 있다 보니 육체와 정신이 지쳐서 블로그 관리를 하지 못했었는데, 어제 새벽 이후로 프로젝트 관련 모든 코딩을 완료(테스트도 완료)하게 되어 다.. 2022. 4. 13.
2022.03.18~03.20의 기록 ▶ 3일 계획 => 공부 관련 1) 수업(18일 수업) 내용 복습 2) MVC 강의 결제 3) 스프링 기술 완강 4) MVC 강의 수강 => 취준 1) 리팩토링 마무리 후 깃 푸쉬 2) 미흡 질문 답변 채우기(한 문장으로 정리) 3) 수강 강의 내용 노션 정리 ▶ 문제 정리 1. JoinPoint & PointCut의 개념 혼동 조인포인트가 메타적인 정보라고 생각하면 되고 포인트컷이 좀 더 구체적인 적용 지점이다! 2. MVC 리팩토링에서 Computer 객체 주입 시점의 문제 ▶ 개인 공부 데이터 바인딩 추상화: Converter와 Formatter public class EventConverter { public static class StringToEventConverter implements Co.. 2022. 3. 19.
2022.03.16의 기록 ▶ 오늘 계획 => 공부 관련 1) 수업 내용 복습 2) 스프링 PSA 수강 3) 인텔리제이 개발 환경 세팅 4) 중급 강의 결제 및 1,2강? 수강 ▶ 문제 정리 1. 빈 등록 문제 > 로그대로 에너테이션으로 빈 등록 2. 컴포넌트 스캔에서 다른 패키지의 클래스를 빈으로 등록 문제 @SpringBootApplication public class Demospring51Application { @Autowired MyService myService; public static void main(String[] args) { var app = new SpringApplication(Demospring51Application.class); app.addInitializers((ApplicationContextI.. 2022. 3. 16.
2022.03.15의 기록 ▶ 오늘 계획 => 공부 관련 1) 수업 내용 복습 2) MVC 객체지향 리팩토링 3) 스프링 강의 수강 목표 8,9강 ▶ 문제 정리 ● MVC 리팩토링 ● 1. enum도 view에 의존하면 안된다. public class Controller { // 게임 결과를 가지고 있는 필드 private Result result; // play 메서드 public void playRsp(Rsp playerRsp) throws RspException { // 사용자 객체 생성 final Player player = new Player(playerRsp); // 게임결과 반환값을 필드에 저장 this.result = player.play(); // 가위바위보 상태 값 출력 ViewOutput.whatYouInput.. 2022. 3. 15.
2022.03.03 의 기록 ▶ 하루 => 공부 관련 1) 스프링 개구리책 CH4 2) MVC 객체지향 리팩토링 (열거형, 인터페이스 고민) 3) 금일 수업 복습 => 파이널 프로젝트 관련 1) DB 마무리 회의 2) 추후 디테일 업무 정리 3) 다음 회의할 것 git 협업 ▶ 문제 정리 1. ▶ 개인 공부 public class ViewInput { private static final String RSP_INPUT = "1, 2, 3 중에서 숫자를 입력하세요."; private static final String RESTART_INPUT = "재시작 하시겠습니까? (y:n)"; private static final Scanner SCANNER = new Scanner(System.in); public ViewInput() { }.. 2022. 3. 3.
2022.02.28의 기록 ▶ 하루 => 공부 관련 1) 스프링 개구리책 CH3 2) MVC 객체지향 리팩토링 3) 금일 수업 복습 => 파이널 프로젝트 관련 1) UI 업무 분담 회의 ▶ 문제 정리 ▶ 개인 공부 ▶ 수업 내용 MyBatis DB ⇒ DB 여러 테이블 Join 시 중복 컬럼명은 aliasname으로 바꿔준다. 테이블 조인 시 동일한 컬럼명을 가진 경우 두번 째 이상의 컬럼명은 자동으로 변경 DTO 객체 직렬화 클래스 : Serializable 인터페이스를 상속받은 클래스 ⇒ 객체 단위로 입력 또는 출력을 위한 클래스 선언 방법 mapper.xml resultMap 엘리먼트의 하위 엘리먼트 선언 순서 constructor >> id >> result >> association >> collection >> disc.. 2022. 2. 28.
2022.02.27의 기록 ▶ 하루 => 공부 관련 1) 기술 질문 정리 및 준비 (람다식, 스트림, 함수형 프로그래밍, 네트워크) 2) MVC 객체지향 리팩토링 후 제출 후 피드백 받기 3) 스프링 입문 책 읽기 => 파이널 프로젝트 관련 1) UI 업무 분담 회의 (가능하면..?) ▶ 문제 정리 1. 상수화의 문제 > 단순 리터럴 값은 스칼라이다. 문제 : 어느 변수를 어떤식으로 상수화해야 할지 감이 오지 않았다. 해결 : 변하지 않는 값, 중복되는 값을 final로 선언해서 해결하였다. (모든 원시 값과 문자열을 포장) 2. 컴퓨터와 사용자 객체의 분리 > 모든 엔티티를 작게 유지해야한다 문제 : 객체의 속성이 종류가 유지 되는 클래스를 작성했었음 해결 : 길어진다는 것은 유지보수가 어렵고 이해하기 어렵고 단일 책임 원칙을 .. 2022. 2. 27.
2022.02.21의 기록 ▶ 오늘 실현 가능한 세부 목표 => 공부 관련 1) 람다와 스트림 2) 대답 못한 질문 답 정리 3) 자바 리팩토링 4) 금일 배운 내용 복습 => 파이널 프로젝트 관련 1) 화면 설계서 회의 ▶ 공부 내용 EL 함수 함수 : 매개변수로 값을 제공 받아 처리하고 반환 메서드 : 필드를 처리하기 위함 ⇒ EL 함수로 호출되는 메서드는 반드시 static 메서드로 선언 TLD파일 function EL 함수를 등록하기 위한 상위 엘리먼트 name EL 함수명을 설정하는 엘리먼트 function-class EL 함수에 의해 호출되는 메서드가 선언된 클래스를 설정하는 엘리먼트 function-signature EL 함수에 의해 호출되는 메서드를 설정하는 엘리먼트 short-name TLD 파일의 이름을 설정하기.. 2022. 2. 21.
반응형