JAVA 진영에서의 ORM 표준 기술인 JPA의 필요성은 여러 자료를 통해 머리로는 대충 알고 있었지만, 영한님 설명을 통해 좀 더 와닿게 되었다 1. 상속 Item 객체를 상속받은 Album 객체를 RDB에 저장할 때 앨범을 필드단위로 분해하여 우측의 ITEM, ALBUM 테이블에 각각 적절하게 저장해주기 위해 INSERT SQL문도 각각 작성하여 두번 날려야 한다 DB에서 ALBUM 객체를 조회할 때는 우측의 ITEM, ALBUM 테이블을 JOIN SQL문으로 묶어주고 그것을 다시 객체로 매핑해준 후 반환한다 이렇게 SQL 의존적이고 복잡한 과정을 피하기 위해 DB에 저장할 객체에는 상속관계를 사용하지 않게 된다고 한다 2. 연관관계 객체 지향적으로 모델링하는 경우에 저장할 때는 크게 문제가 없다 대..
spring
가장 에러를 많이 만났던 주차였다. 스스로의 힘으로 리팩토링에 성공해서 원하는 결과물을 만들어냈고, 금요일부터는 새로운 팀원들과 팀플 및 개인공부를 진행중이다. 다음 주차부터는 지금까지 배운 것들을 토대로 실제 서비스와 같은 것들을 만들어 나갈텐데, 지금 내 수준 정도로 괜찮은건가? 싶기는 하지만 앞으로 계속 배워나가면 된다라며 스스로를 다독이고 있는 것 같다. 1. ORM(Object Relational Mapping) 애플리케이션의 객체와 RDB(relational database)를 연결(mapping)하는 것이다 자바는 객체로 구성하여 프로그래밍하고, RDB는 테이블로 이루어져 있으며, 애초에 이 둘은 호환을 염두에 두고 만들어진 것이 아니기 때문에 객체와 테이블을 매핑하는 것에 문제가 생길 수 ..
언젠가부터 너무 적당히만 공부하는 것 같다. Git 공부, TDD, 코테 문제 등 할게 많은데도 사리면서 하는게 많이 느껴지는데, 좀 반전시키고자 오늘은 코테문제 하나 풀고 마무리하려고한다 ㅎ.. 또 다른 분위기 반전으로 김영한님의 JPA 기본 강의를 구매해서 다음주부터 들을 예정이기 때문에 또 열심히 달리게 되는 계기가 되지 않을까 싶다. 1. Spring 과제에 스케줄러를 구현해보았다 매일 오전 1시에 댓글 갯수가 0개인 게시글을 모두 삭제해주는 로직을 만들어야 했다 먼저 애플리케이션에 @EnableScheduling으로 인식하게 해주고 @EnableScheduling @EnableJpaAuditing @SpringBootApplication public class IntermediateApplica..
1. Spring Spring 주특기 마지막 주차에 예상치 못하게 팀플을 하게 되었는데 괜찮은 것 같다. 이번 기회에 많이 익숙치 않은 깃과 협업을 좀 더 연습하면 좋을 것 같다. GitHub Desktop에서 원격에 있는 repo 불러오기 -> clone repository IntelliJ에서 원격에 이미 만들어져 있는 repo 불러오기 -> get from version control (새로 생성은 share project on Github -> commit directory) find action (ctrl + shift + A) AWS S3 서비스를 이용해 게시글을 작성할 때 이미지를 업로드하고, 응답으로 이미지 url을 받는 기능을 배정받았다 https://devlog-wjdrbs96.tisto..
이노베이션 캠프 4주차를 수행하면서 배운 것 중 유용한 것을 정리한다. 스프링 어노테이션이 얼마나 큰 역할을 하는지 더욱 알게된 한 주였다. 1. MySql 먼저 오늘 배포하기 전에 H2에서 RDS MySql로 바꾸었을 때 JPA - Field 'id' doesn't have a default value 이런 에러가 자꾸나서 찾아본 결과 JPA와 DB의 save() 관련 sql문 차이가 있어 따로 설정해주어야 되는 부분이있었다. // User @GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; 유저 엔티티의 DB id값 설정에서 원래 GenerationType.AUTO에서 GenerationType.IDENTITY로 바꿨었는데..
새로운 개념들이 본격적으로 쏟아지기 시작하는 것 같다. 19일차부터 코드치고, 성질내고 하면서 계속 TIL도 안쓰고 코테 문제풀이도 안하다가 나름 여유가 생겨서 간단하게 적어보려 한다. 금요일에 학습자료를 활용해서 스프링 시큐리티를 이용한 회원가입, OAuth를 따라치며 배웠고, 그 다음날부터 JWT관련해서 엄청나게 헤맸다. 어제까지 계속 샘플 JWT코드로 내가 원하는대로 작동하게끔 시도했지만 계속 실패해서 그냥 동작하게끔 일단 세팅해놓고 오늘부터 회원 관련한 게시판, 댓글 등의 기능을 다 구현했다. 댓글 엔티티와 게시글 엔티티 사이의 DB 연관관계에서 막히는가 했지만 스프링 어노테이션의 엄청난 힘을 다시 한번 느끼면서 잘 극복했고, 예외처리까지 거의 마무리된 것 같다. 아직 refresh token 검..
1. Spring 코드를 개선하고 재배포할때 계속 8080포트가 이미 사용중이라는 에러가 떠서 git bash에서 제거해준 뒤 다시 배포하는데 성공했다 맨위 id에 해당하는 프로세스 종료했다 ps -ef | grep java kill -9 [process_id] 스프링 MVC의 내부 동작에 대해 좀 더 깊게 알게 되었고, 이는 17일차 TIL에 한꺼번에 작성해놓았다 테스트코드도 연습삼아 짜봤는데, 스프링 데이터 JPA를 사용하면서 단위테스트는 잘 되지 않아서 일단 통합 테스트로 진행해보았다. 서비스 계층의 게시글 등록에 대한 테스트 딱 한개만 진행했고, 단위 테스트로도 할 수 있는지 좀 더 공부해야 할 것 같다 17일차 TIL에 설명했던 것 중 Enum 사용과 ExceptionDto 요소 확장은 오늘 진..
다음날 쓰는 늦은 TIL이다. 이 날은 엄청 여유롭게 공부하다가 늦은 시간 피드백 받고 부랴부랴 다시 공부했던 날이다 ㅎ.. 1. Spring MVC 1. DispatcherServlet ↔ Handlermapping: 요청을 받은 프론트 컨트롤러가 Handlermapping를 통해 어떤 컨트롤러의 어떤 함수를 써야하는지 알게된다 (Handlermapping에 api path와 컨트롤러 함수가 매핑되어있음) 2. DispatcherServlet ↔ Controller: 해당하는 컨트롤러에 클라이언트의 요청(+Model)을 넘겨주어 컨트롤러는 그 요청을 처리하여 Model과 View 데이터를 넘겨준다 3. DispatcherServlet ↔ ViewResolver: 전달받은 Model과 View를 View..
1. Spring 개인과제에서 전에 하기로 했던 계층 분리와 responseDto 관련 코드를 작성하여 오늘 AWD RDS와 연결하고, 배포까지 진행했다 responseDto는 하나의 클래스 안에 static inner class 세개를 담아서 각각 article list, article, null id 관련 에러 응답을 만들어 프론트에 보내지기 전에 감싸주는 역할을 주었다 이런식으로 중첩 클래스로 처리했을 때 생기는 문제가 있을 지 물어볼 계획이다 enum은 처리할 에러 상황이 너무나 적어서 쓰지 않았지만, 공부가 더 필요하긴 할 것이고, 확장성있게 짜는 것이 목표였다면 enum을 적용했어야 할 것 같다 팀과제도 미팅해서 진행했는데, JPA의 필요성을 다시 한번 알게 되었고, DNS 와 통신하는 것의 ..
금요일부터 시작한 주특기 주차에서 전 주차에 비해 갑자기 배우는 내용이 많아졌다보니 정신없으면서도 재밌는 것 같다. 개인과제로 스프링을 활용해 기본 CRUD 기능을 가진 게시판을 만드는 것, 팀 과제로 스프링을 배우면서 중요한 키워드를 정리하는 것을 할당받았다. 이미 알고 있는 내용과 주어진 학습 자료를 십분 활용해 일단 개인과제를 만들기 시작해서 어제(13일)에 기능 구현을 마쳤고, 기술 매니저님 피드백 이후 리팩토링하는 절차를 밟고 있다. 피드백 받기를 잘한 것 같다. 강의나 자료를 쭉 소화하고 만들기보다는 뭔가 그냥 무작정 만들어보고 싶었다. 빠르게 완성하고 강의자료에서 주어진 예제들을 더 연습하면서 스프링에 익숙해지면 될 것 같다. 1. OOP 기존의 절차 지향적인 개발 방식과는 다르게, 서로 관..