본문 바로가기

전체 글123

23/12/15 아웃소싱 팀 프로젝트 회고 우리가 JPA를 사용하면서 연관관계를 형성하지 않고 외래키(Id)만을 필드로 두면서 엔티티를 설계한 이유 JPA를 사용하면서 객체 그래프 탐색할 때 실행되는 쿼리가 궁금해졌다. JPA는 연관관계만 설정해 주면 해당 연관관계에 접근했을 때, 자동으로 쿼리를 실행해 준다. 이 자동으로 실행되는 쿼리는 우리가 예상하지 못하는 무수히 많은 수의 쿼리가 실행될 수도 있고, 성능상 좋지 못한 쿼리가 실행될 수도 있다. 그래서 예상되는 쿼리를 데이터베이스 조인을 통해 우리가 SQL로 직접 작성하여 실행함으로써 연관관계에 대한 객체 그래프 탐색을 SQL을 통해 구현하기로 하였다. 혹시나 다음에 다른 ORM으로 변경되더라도, 우리가 작성한 코드의 큰 변경없이 마이그레이션하기 좋고, 유지보수가 .. 2023. 12. 15.
23/12/14 AOP aop는 관점 지향 프로그래밍이라 불리고 핵심 기능과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것이다 어드바이스 부가기능을 핵심기능에 언제 수행할 건지를 정하는 것이다. (핵심기능 실행전 or 실행후 or 전후 전부 or 핵심기능이 오류가 난다면 예외 터지면 그때 수행 or 핵심기능 예외없이 성공후 수행) @Around: '핵심기능' 수행 전과 후 (@Before + @After) @Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행) @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작) @AfterReturning: .. 2023. 12. 14.
23/12/13 예전 뉴스피드 프로젝트중 공통 예외 처리를 이런방식으로 직접 서비스단에서 HttpStatus,메세지를 적어서 넘겨주고,공통 ExceptionResponse를 사용 안해서 컨트롤쪽에서 일일이 trt,catch문으로 해서 코드만 길어지는 문제가 있었다. 그래서 enum으로 하고 공통 ExceptionResponse 사용 하는 방법도 있다. enum으로 하는 방식 1. 먼저 enum클래스를 생성후 각 상수에 int형 상태코드랑 반환할 메세지 적는다. 2. 예외 클래스를 만든다.(현재 캡처는 비니지스,커스텀 예외 추가중) 예외 클래스 생성자에서 enum클래스를 받는다. super부분이랑 this.status는 받은 enum클래스의 정보에 해당 상수값 가져온다 3. 글로벌 예외 핸들러 생성한다. httpStatu.. 2023. 12. 13.
23/12/12 프로그래머스 옹알이 (2) 문제 def solution(babbling): answer = 0 possi=["aya", "ye", "woo", "ma"] for i in babbling: for k in possi: if k*2 not in i: i = i.replace(k," ") if len(i.strip()) == 0: answer+=1 return answer 맨처음에 product 사용 해야겠다 생각 나서 복잡하게 접근하고 해봤지만 실패하고 알고보니 그냥 replace를 이용하는 문제 였다. 2023. 12. 12.
23/12/08 이번 팀프로젝트에서는 지금까지와 다르게 여러 규칙을 많이 정했는데 그중 메소드 길이 15줄 이상 일시 따로 메소드로 빼는 부분이 힘들지만 다 하고 나면 좋아 보이긴한다. 만약 메소드에서 따로 메소드를 안빼고 registerOrder 메소드에에서 다 처리 했다면 코드 길이가 어마어마하게 길어져서 다른사람은 registerOrder 메소드 보자마자 때려치고 싶어 할거다. 그래서 이렇게 따로 메소드로 빼는게 좋긴한데 메소드 이름 정하는게 제일 어렵다.. 그리고 실제 작업전 미리 어떻게 하는게 좋을지 틀을 이렇게 생각해보고 정리하고 시작했는데 당연 시작전 생각했던거랑 달라서 수정하기도 했으나 작업할때 막힘이 없어서 좋았다. ↓ ↓ ↓ ↓ ↓ ---------------------------------------.. 2023. 12. 8.
23/12/07 프로그래머스 모의고사 문제 def solution(answers): answer = [] a = [1, 2, 3, 4, 5] b = [2, 1, 2, 3, 2, 4, 2, 5] c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] count=[0,0,0] for idx,value in enumerate(answers): if a[idx % len(a)] == value: count[0]+=1 if b[idx % len(b)] == value: count[1]+=1 if c[idx % len(c)] == value: count[2]+=1 rank_max= max(count) for idx,value in enumerate(count): if value == rank_max: answer.appen.. 2023. 12. 7.