본문 바로가기

Happyer16

(314)
3장. Immutable.js 익히기 https://velopert.com/3354 Redux 를 통한 React 어플리케이션 상태 관리 :: 3장. Immutable.js 익히기 | VELOPERT.LOG 이 튜토리얼은 5개의 포스트로 나뉘어진 이어지는 강좌입니다. 목차를 확인하시려면 여기를 참고하세요. 3장. Immutable.js 익히기 Immutable.js는 자바스크립트상에서 불변성의 데이터를 다루는것을 도와줍니다. 3장을 진행하기에 앞서, 우선 자바스크립트에서 객체의 불변성에 대해서 알아보겠습니다. 객체의 불변성 이를 이해하려면, 간단한 자바스크립트 코드들을 실행해보아야합니다. 크롬에서 개발자도구를 열고, 다음 코드를 입력해보세요: let a = velopert.com 해당 블로그를 보고 공부하면서 정리한 글입니다. 객체의 불변성..
Spring Security - remember-me에 관하여 ( 로그인 유지하기 ) Remember-me architecture 로그인 기억하기를 구현할 때 굳이 전체 아키텍처를 이해하지 않아도 되지만, 커스터마이징이 많아질 수록 전체 흐름을 이해해야 구현하기 편해진다. 그래서 remember-me 전체 흐름도에 대해 알아보자. ( 해당 그림은 token 기반 remember-me의 흐름도다 ) 스프링 시큐리티 필터들과 같이, RememberAuthenticationFilter가 FilterChainProxy에 포함되어 있다. RememberAuthenticationFilter는 request를 보고 필요한 경우 특정 동작을 수행한다. RememberMeAuthenticationFilter인터페이스는 해당 사용자가 이미 로그인 한적이 있는지 확인하기 위해 RememberMeService..
Jackson 관련 객체간 서로 참조인 경우 @JsonManagedReference, @JsonBackReference 사용하기 @JsonManagedReference : 해당 부분이 serialize 된다 @JsonBackReference : serialize 에서 제외 된다.
14장. 데이터 모델링 - Real MySQL 공부하게 된 이유 데이터 모델링은 항상 개발 일정에 쫓겨 급하게 컬럼을 추가하거나 하나의 테이블에 모든 정보를 담아왔다. 하지만 DBMS 사용에 가장 중요한 부분이기 때문에 해당 챕터를 읽게 되었다. 들어가기 전에 서비스 개발 과정 중 데이터베이스 관련 부분을 단계별로 나누면 크게 2가지가 있다. 논리 모델 : 서비스에 어떤 것들이 필요할지 분석하고 그의 집합 간의 관계에 대한 정의 물리 모델 : 시스템으로 어떻게 표현할지 고려하는 것 논리 모델링 모델 정규화 정규화하면 항상 어렵게 생각했는데, 개념을 살펴보기 전에 해당 테이블을 살펴보자! 다음 모델을 보면 어떤 생각이 드는가? "우편번호와 주소" : 한 attribute에 2가지의 정보가 들어있다. attribute를 분리하자 "친구회원들의 회원번호"..
6. Enums and Annotations - Effective Java 3th 자바에는 enum과 annotation이라는 것이 있다. 이번 챕터에서는 이 두가지를 잘 사용하는 방법에 대해 살펴보자. Item 34 : int 상수 대신 enum을 사용하자 기본적인 상수만 있는 enum 말고 동작이 필요한 Enum을 만든다면? 가장 기본적인 구현방법은 아래와 같을 것이다. // Enum type that switches on its own value - questionable public enum Operation { PLUS, MINUS, TIMES, DIVIDE; // Do the arithmetic operation represented by this constant public double apply(double x, double y) { switch(this) { case ..
N+1 문제 해결하기 ( fetch join, @EntityGraph ) 댓글과 대댓글을 조회하는 API를 개발하였는데, 검색이 비이상적으로 오래 걸려 Query문을 다시 봤다. 1. 기존 Query @Query(value = "SELECT c FROM Comment c WHERE c.goodsId = ?1 AND c.id = c.parentIdx " + "AND c.memberName not in ?2 ORDER BY c.regDate DESC, c.commentRate DESC ") Page findCommentsByGoodsIdExcludeAdminComment(Long goodsId, Collection excludeMembers, Pageable pageable); Hibernate: select comment0_.good_comment_idx as good_com1..
10. Exceptions ( 예외 처리 ) - Effective Java 3th 예외처리는 적절하게 사용하면 가독성, 안정성이 올라가지만, 적절하게 사용하지 않으면 오히려 잘못된 길로 가게 된다. Item 69. 예외 상황을 위해서만 예외처리를 하여라. // Horrible abuse of exceptions. Don't ever do this! try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 위의 코드는 결국 range 범위를 넘어가면 exception을 발생시킬 것이다. 하지만 이 코드는 결국 아래와 같다. for (Mountain m : range) m.climb(); Exception은 이름 그대로, 예외 상황을 위해서만 사용되어야지 원래 control ..
Spring boot 테스트하기 Spring boot에서 unit & integration 테스트하기 Java Test Unit 자바에서 대표적인 테스트 프레임워크는 JUnit이다. 결과를 확인하기 위한 matcher를 지워하는 Hamcrest 프레임워크도 있다. 아래는 다양한 사용방법이다. public class AssertTests { @Test public void testAssertEquals() { assertEquals("failure - strings are not equal", "text", "text"); } @Test public void testAssertFalse() { assertFalse("failure - should be false", false); } @Test public void testAssertNo..
Spring - Unable to acquire JDBC Connection 이슈 잘 되던 서비스가 갑자기 Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms. 위와 같은 에러를 내었다. JDBC connection을 못가져온다고?? 그래서 위에 로그를 봤더니 30초가 지나도록 connection을 못가져오고 있었다. 왜 이럴까? org.s..
Git 유용한 기능들 생각없이 git push, pull 정도만 사용해왔지 git에 대해 조금 더 공부해야 함을 느꼈다. 그래서 유용한 기능들에 대해 정리해보겠다. 혹시나 제가 모르는 유용한 기능들이 있다면 댓글로 남겨주세요~~ Git log 관련 기능들 커밋 히스토리를 조회할때 많이 사용하는 것중 하나는 특정 변화 추적이 아닐까 싶다. 아래 명령어는 'messageSource'라는 함수가 추가되거나 제거된 커밋을 찾고, 변화된 내용을 보여주는 것이다. git log -p -S {찾고 싶은 string} git log -p -S messageSource git add -i 대화형 명령 대화형 명령을 적용할 수 있는 옵션이다. 하지만 이건 정리하지 않으려 한다. 왜냐하면 이렇게 치는거보다 개인적으로 Sourcetree와 같은 ..