전체 글

개발 기록
· PS
#1456 - 거의 소수 난이도: 골드5문제 유형: 정수론, 소수 https://www.acmicpc.net/problem/1456 문제 분석 최대 범위에 해당하는 모든 소수를 구한 뒤, 이 소수들이 입력된 A와 B 사이에 존재하는지 판단하여 문제를 해결할 수 있다. 입력에서 주어진 최댓갑신 10^14까지 소수를 탐색하는 것이 아니라 에라토스테네스의 체를 이용하여 소수를 구할 것이기 때문에 10^14의 제곱근인 10^7까지의 소수를 탐색해줄 것이다. 후에는 주어진 소수들이 A~B 범위 안에 속하는지 판별하여 유효한 소수개수를 결과로 출력해주면 된다. 1. 2 ~ 10,000,000 사이에 존재하는 모든 소수를 구한다. 2. 각각의 소수에 관해 소수를 N제곱한 값이 B보다 커질 때까지 반복문을 실행한다. ..
· GDG KNU
https://docs.google.com/presentation/d/1K_4EcPfjRS0Fg7Hs6jBB3TdzqXy439G80ZjXx7pOzI4/edit?usp=sharing JPA N+1JPA N+1docs.google.com GDG KNU 정기발표세션에서 발표한 JPA N+1 자료
JPA N+1 문제를 @EntityGraph로 해결해보자 N+1 문제란N+1 문제는 JPA 쓸 때 자주 마주치는 성능 이슈다. 연관 관계가 있는 엔티티를 조회할 때 추가 쿼리가 잘데없이 더 나가는 현상이다. 특히 컬렉션 조회할 때 더 자주 발생한다.예를 들어보자. 게시글 10개를 조회하는데 각 게시글마다 작성자 정보를 가져와야 한다고 하면처음에 게시글 목록 가져오는 쿼리 1번각 게시글의 작성자 정보 가져오는 쿼리 10번 이렇게 총 11번의 쿼리가 실행되는 현상을 N+1 문제라고 한다.Fetch Join으로 페이징처리 할 때의 한계Fetch Join보통은 Fetch Join으로 다음과 같이 해결하는 방법을 쓴다. @Query("SELECT p FROM Post p JOIN FETCH p.author") L..
카카오페이 api를 이용해서 결제 기능 구현하기 프로젝트 진행 중 우리 서비스에 포인트 결제 기능이 있는데 이걸 구현하기 위해 카카오페이 api를 사용하게되었다. 실제 결제를 구현하려면 사업자 등록에 여러 거쳐야되는 절차가 필요하여 우선 테스트 결제라도 구현하는 방향으로 결정했다.      먼저 아래 링크에 들어가 카카오페이 디벨로퍼스에 가입하자. https://developers.kakaopay.com/ 카카오페이 | 개발자센터새로운 기회와 가치를 함께 만들어봐요developers.kakaopay.com   가입한 다음, 위와 같이 애플리케이션을 생성해준다.  애플리케이션 정보에 들어오면 위와같은 화면이 뜨게되는데, 여기서 우리가 테스트 결제용으로 사용할 secret key는 빨간색으로 칠해진 Secr..
· PS
#22858 - 원상 복구 (small)난이도 : 실버 3문제 유형 : 구현 https://www.acmicpc.net/problem/22858 문제 분석문제가 난잡하게 설명돼있는데  D = [4, 3, 1, 2, 5]P = [1, 4, 5, 3, 2]일 때S[] 가 결정되는 방식은  1~N까지의 수가 하나씩 존재하는 수열 D1,D2 ... Dn 이 있을때 , 각 i에 대해 Di 번째 카드를 i번째로 가져오는 작업을 셔플이라고 한다. i = 1일때 D1은 4이고, Di 번째 카드를 i번째로 가져온다했으니 P에서 4(D1)번째카드를 S의 1(i)번째로 옮기는 것이다.그래서 i= 1 일때 S는 S = [3,0,0,0,0] 가 된다. i = 2 일때는 D2는 3이고, P에서 3(D2)번째카드를 S의 2(i)번..
· 종합
디자인 패턴(Design Pattern) 소프트웨어 설계에서 자주 발생하는 문제들을 해결하기 위해 반복적으로 사용되는, 검증된 설계 방법을 정형화한 것. 다시 말해, 소프트웨어 개발 과정에서 직면하는 공통적인 문제를 해결하기 위한 최선의 사례(Best Practices)를 문서화한 것 어댑터 패턴(Adaptoer Pattern)"호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴"어댑터 패턴은 소프트웨어 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 두 개체가 함께 작동할 수 있도록 중간에 "어댑터" 역할을 하는 클래스를 두어 호환성을 제공하는 패턴이다. 어댑터 패턴이 적용되지 않은 코드package adapterPattern;public class Ser..
· 종합
객체 지향 설계의 핵심 원칙은 응집도를 높이고(High Cohesion), 결합도를 낮추라(Loose Coupling)는 고전 원칙을 재정립한 것이다. 이러한 원칙을 SOLID라는 약어로 표현하며, 각 원칙은 객체 지향 설계의 주요 개념을 다루고 있다. SRP - 단일 책임 원칙 (Single Responsibility Principle)"어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다" - 로버트 C. 마틴SRP는 클래스, 모듈, 메서드 등 각 요소가 하나의 책임만 가지도록 설계하는 것. 이는 코드의 유지보수성과 이해도를 높이는 데 중요한 역할을 한다. 잘못된 예class 사람 { String 군번;}사람 로미오 = new 사람();사람 줄리엣 = new 사람();줄리엣.군번 = "1573..
카카오테크캠퍼스 STEP2 3주차 회고이번 3주차의 주제는 기존 JDBCTemplate를 쓰던 코드를 JPA 로 변환하는 것이다. JPA? JPA는 자바 진영에서 ORM(Object-Relational-Mapping) 기술 표준으로 사용되는 인터페이스의 모음.간략하게 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것.https://dbjh.tistory.com/77 [Spring JPA] JPA 란?이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제적으로 구현된것이dbjh.tistory.com 1단계 - 엔티티 ..
· PS
#13023 - ABCDE  난이도 : 골드 5문제 유형 : DFS/그래프 탐색 https://www.acmicpc.net/problem/13023  문제 분석오늘은 다음과 같은 친구 관계를 가진 사람 A, B, C, D, E가 존재하는지 구해보려고 한다.A는 B와 친구다.B는 C와 친구다.C는 D와 친구다.D는 E와 친구다. A-B-C-D-E 라는 관계가 성립하는 노드,엣지를 구하는거라는 건 알겠는데 이걸 어떻게 구할지 생각이 잘 나지 않았다. 예제 2번을 보면 0 - 1 - 31 - 0 - 2 - 42 - 1 - 33 - 2 - 04 - 1위와 같은 인접리스트가 만들어진다. 이 문제가 요구하는 바는 간단하게 0 - 3 - 2 - 1 - 4 와 같이 depth가 5 이상인 관계가 만들어지면 출력이 1,..
카카오테크캠퍼스 STEP2 2주차 회고 이번 2주차의 주제는 카카오톡 선물하기 기능 중 위시 리스트 기능 구현이다. 1주차에서는  JdbcTemplate와 H2 Database를 이용하여 각 상품들을 CRUD 할 수 있는 관리자 페이지를 구현하였다. 2주차의 기능 요구사항은 여기에 덧붙혀 유효성 검사,회원가입 및 로그인,위시 리스트 기능을 추가하는 것이다. 1단계   상품을 추가하거나 수정하는 경우, 클라이언트로부터 잘못된 값이 전달될 수 있기 때문에 유효성 검사를 통하여 어떤 부분이 잘못되었는지 알려주는 기능을 추가해준다. 유효성 검사는 다음과 같은 조건을 따른다.상품 이름은 공백을 포함하여 최대 15자까지 입력할 수 있다.특수 문자가능: ( ), [ ], +, -, &, /, _그 외 특수 문자 사용..
· Utility
.http 파일을 만들어준 후 위와 같은 형식으로 http 메서드 요청을 보낼 수 있음
· 전공수업
Prim's algorithm (프림 알고리즘) MST(Minimum Spanning Tree) 최소비용신장트리를 구하기 위한 알고리즘 중 하나 - 시작 정점에서부터 출발해 신장 트리 집합을 단계적으로 확장해나감   * 시작 단계에서는 시작 정점만이 신장 트리 집합에 포함 - 신장 트리 집합에 인접한 정점 중에서 최저 간선으로 연결된 정점을 선택하여 신장 트리 집합에 추가 - 이 과정을 신장 트리 집합이 n-1개의 간선을 가질 때까지 반복  프림 알고리즘 C언어 코드#include #include #include #define MAX_VERTICES 4#define INF 1000Lint weight[MAX_VERTICES][MAX_VERTICES] = { // 신장트리의 표현 {0,1,5,6},..
· CS
9번 스택인 s1,s2를 담은 구조체 QueueType을 이용하여 s1에 1,2,3 이들어왔을때 s2가 비었다면 s1의 모든 원소를 s2에 넣어줌 s2에 3,2,1순으로 쌓이게됨 s2를 차례대로 pop하면 Queue의 역할 typedef struct QueueType{ StackType s1; StackType s2; }; void Queue_init(QueueType *q){ q->s1.top = -1; q->s2.top = -1; } void Queue_enqueue(QueueType *q,int data){ push(&(q->s1),data); return; } int Queue_dequeue(QueueType *q){ if(is_empty(&(q->s2))){ while(!is_empty(&(q-..
· CS
10번 입력 받은 정수로 배열을 만든뒤 배열의 값을 스택에 넣고 모두 pop int main(void) { StackType s; init(&s); int num, i , inp; scanf("%d",&num); for(i=0;i
localhost:8080/users/1234 이렇게 없는 유저를 조회했을때 404로 예외처리를 하고싶음 UserNotFoundException.java (예외 파일 정의) @ResponseStatus(code = HttpStatus.NOT_FOUND) // 404설정 public class UserNotFoundException extends RuntimeException { public UserNotFoundException(String message){ super(message); } } UserResource.java ( GET부분 수정) @GetMapping("/users/{id}") public User retrieveUser(@PathVariable int id){ User user = se..
ggdev
GG.Dev