😎 주인장의 나불나불
엄마랑 전화하다가 "주말에는 밀린 집안일도 많고~ 밥 해먹기도 귀찮고~ 집에 우렁각시 한 명 있었으면 좋겄네~"라고 말했는데 엄마가 "여기 있잖아. 엄마"라고 말해서 진차 눙물이 날 뻔했다... 본가에 있으면 그렇게 싸우는데.... 아챠챠~! 부모님한테 잘해야지
집 나오면 개고생이라는 걸 뼈저리게 느끼고 있는 요즘. 숨만 쉬어도 몇 십 만원이 나가고 주말에는 할 일이 넘쳐나고 호두는 보고싶고(?)
버뜨 나는 강하고 씩씩하기 때문에 이런 상황에서도 적응할 방법을 찾고, 조금 더 행복을 느낄 수 있는 소확행 포인트들을 찾는다. 이번 주는 좋아하는 카레를 해먹어야겠다. 하루는 치즈돈가스 올려서 먹고 하루는 치킨 윙봉 올려서 먹어야지😎
⭐️ 배운내용
🖥️ 스프링 스프링 또프링
Model, View, Controller로 로직을 처리하는 MVC 패턴을 사용해 회원가입(Create), 조회(Read), 수정(Update), 삭제(Delete)하는 웹 페이지를 개발했다. Model에 담아 View에 넘기는 순간 이것은 SSR. 서버 측에서 데이터를 꽂아 화면까지 주는 것을 말한다.
역시 백엔드 개발자답게 화면은 구리지만 @GetMapping @PostMapping @RequestMapping @Controller @Service @Repository @Data @RequestParam @Transactional 배웠던 어노테이션들을 모두 사용해서 실제 url과 data를 주고 받아 DB에 저장하고, 사용자에게 data가 담긴 화면을 주었다.
MVC CRUD Code
@Getter
//Entity 어노테이션을 통해 mariaDB 테이블 및 컬럼을 자동 생성
//Class 명은 테이블명, 변수명은 컬럼명
@Entity
@NoArgsConstructor //기본 생성자 말고 다른 생성자가 있을 때 추가해줘야 함.
//// JPA가 모든 속성에 setter로 런타임에 값을 넣어줘야 하기 때문이다.
public class Member {
@Setter
@Id //pk 설정
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; //Repository에서 set하기 위해 어쩔 수 없이 붙임 (DB와 싱크를 맞추기 위해 필요함)
// String은ㅇ DB의 varchar로 자동 변환
private String name;
@Column(nullable = false, length = 50)
private String email;
private String password;
@Setter
@Column(name = "created_time") //name 옵션을 통해 DB의 컬럼명 별도 지정 가능
//DB의 컬럼명은 created_time, 스프링에서 Member 객체 조립할 때 create_time으로 알아서 넣어줌
private LocalDateTime create_time;
public Member(String name, String email, String password){
this.name = name;
this.email = email;
this.password = password;
this.create_time = LocalDateTime.now();
}
}
CSR 방식으로 view를 없애면서 조금 더 현대화된, 프론트-백엔드 역할이 나뉜 코드로 업그레이드 했다. 백엔드 개발자는 data만을 return해주고, 프론트 개발자에게 "데이터 받아서 알아서 화면 처리 해!" 하면 된다.
이럴 경우 가장 중요한 변화는 @RestController 어노테이션을 붙여 모든 메소드가 화면이 아닌 JSON(data)을 반환하게 만들어주고, ResponseEntity를 사용해 예외가 터졌을 때, 혹은 터지지 않았을 때 적절한 값과 상태 코드를 넘겨 프론트엔드 개발자에게 알려줘야 한다.
너무너무 재미있었던 실습.. 백엔드를 배우고 싶은 마음이 컸기에 조금 복잡하고 어려워도 재미있게 즐기면서 따라갔던 것 같다.
⭐️ 좋았던점
🐹 시내와 함께하는 아침 러닝
우리 귀여운 막둥이가 아침에 뛰면 그렇게 상쾌하다고 그래서 처음에는 호기심반으로 해볼까... 했는데 6시에 눈뜨는 것도 힘들고, 침대가 너무 소즁해서 따뜻한 이불에서 벗어나지 못했다..... 5분만...이 1시간이 되는 마법
체력이 계속 떨어져서 유산소를 해야겠다고 생각하던 도중에, 강사님께서 골골거리는 내 벨로그 일지를 보고 달리기를 해보는 건 어떻겠냐고 권유하신 게 행동으로 옮기는 데 결정적인 역할을 했다.
의지 박살을 방지하려고 시내에게 모닝콜을 부탁해따. zombi 시내는 잠을 코딱지만큼 자고 어떻게 하루 하루를 버티는지... 젊은 게 최고다ㅋ ㅋ 어쨌든 러닝 첫날에는 너무 힘들어서 지하철에서 서서 잤다.. 서서 졸면 다리먼저 힘이 풀려서 계속 풀썩풀썩거림ㅋㅋㅋ 옆사람 꽤나 웃겼겠는걸... 3km씩 뛴지 이제 일주일이 됐는데, 점점 기록도 좋아지고 체력도 기분도 좋아짐을 벌써부터 느낀다. 그치만 9시에 커피 안마시면 기절 한 달 정도 꾸준히 해봐야징~
🖥️ 두근두근 스프링 복습
실습 도중에 큰 기능 단위 별로 깃허브 커밋을 잘 해둔 덕분에 복습하기 편하다.
집에서 MVC CRUD, RestFul CRUD를 통째로 복습하며 코드를 익혔다.
2024 팬톤 컬러인 피치 퍼즈 색을 이용해 화면도 예쁘게 꾸며봤다. 사실 복습보다 화면 꾸미는 데 더 오래걸렸다.ㅋㅋㅋ
🦥 한 개념에 매달려보기
이해가 잘 안 된 Optional 개념을 블로그에 정리하다가, 헷갈려서 명확하게 정리가 안돼서 한참을 매달려서 이해했다.
Optional 정리
특히 Optional 클래스가 제공하는 orElse(), orElseGet() 두 개의 메소드가 헷갈렸는데, 코드를 하나하나 까보면서 이해하니 훨씬 명확해졌다. 앞으로는 대충 정리된 다른 기술 블로그를 볼 바엔 공식 문서를 보거나, 직접 들어가서 구현된 코드를 까봐야겠다.
⭐️ 아쉬웠던점
평일에 열심히 식단하면 주말에 혼자 있으면 살짝~ 풀어지는 느낌. 그래서 이번 주말에는 불닭을 먹었다. 참치(단백질)도 먹었으니까 괜찮지 않을까..?ㅋ_ㅋ 그래서 이번주 식단을 위해 양배추도 사고 숙주랑 고기도 샀다. 카레도 해먹고 싶어서 감자랑 당근도 샀다.
전반적인 흐름은 잘 따라가고 있으나, 세부적인 내용들까지 챙기고 있진 못한 것 같다. 특히 @Transactional 같이 어려운 개념이 나오면 뇌가 자꾸 지식을 거부한다ㅋㅋㅋ... 그래도 집어넣어... 쑤셔넣어... 뇌 너는 지칠 자격 읎써~~!
⭐️ 계획
팬톤까지 찾아보는 유정님 센스가 대단 한 것 같습니다.
건강 챙기시려고 새벽 운동을 하신다고 하셨는데
날이 추워서 감기 조심하세요~
이번주도 화이팅입니다.