모르지 않다는 것은 아는것과 다르다.

전체 글 224

API 예외처리

API 예외처리가 필요한 이유 HTML 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. API의 경우에는 생각할 내용이 더 많다. API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. API 예외 처리 - 스프링 부트 기본 오류 처리 BasicErrorController 를 통해서 프링 부트가 제공하는 기본 오류 방식을 사용할 수 있다. 구현은 아래와 같이 되어있다. @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResp..

Spring 2022.02.26

Spring AOP

AOP 란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부른다. 아래와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다. 프록시 패턴 위에서 보듯 Client는 이 interface 타입으로 Proxy 객체를 사용하게 된다. Proxy 객체는 기존의 타겟 객체(Real Subject)를 참조하고 있다. Proxy 객체와..

Spring 2022.02.26

@Valid, @Validated

@Valid, @Validated 개요 평소 validation 처리할때 자주 사용했던, @Valid, @Validated 에 대해서 자세히 알아보고자한다. @Valid JSR-303 표준 스펙이다. javax.validation.Vaild 필드에 달린 제약조건 어노테이션을 참고해 검증할때 주로 사용된다. 빈 검증기(Bean Validator)를 이용해서 검증하는 애노테이션이다. Spring에서는 LocalValidatorFactoryBean을 이용해 JSR 표준의 검증 기능을 사용할 수 있다. -> LocalValidatorFactoryBean 는 JSR-303의 검증 기능을 이용할 수 있도록 해주는 일종의 어댑터에 해당한다. @Valid 를 사용하려면, LocalValidatorFactoryBean을..

Spring 2022.02.26

프로그래머스 파일명 정렬 문제

접근 방식(알고리즘 분류) 문자열 문제 내 풀이 def solution(files): answer = [] for f in files: head, number, tail = '', '', '' number_check = False for i in range(len(f)): # 문자열 자르기 if f[i].isdigit(): # 처음 나오는 숫자부터는 NUMBER로 number += f[i] number_check = True elif not number_check: # NUMBER가 나오기 전까지는 HEAD head += f[i] else: # NUMBER가 이미 나왔고, 숫자가 아닌 문자가 나오면 TAIL tail = f[i:] break answer.append((head, number, tail))..

알고리즘 2022.02.26

점프와 순간이동

접근 방식(알고리즘 분류) 연산문제 내 풀이 def solution(n): ans = 1 while n != 1: if n % 2 == 0: n = n // 2 else: ans += 1 n -= 1 return ans 풀이 설명 5000 --> 2500 --> 1250 --> 625 --> 624 --> 312 --> 156 --> 78 --> 39 --> 38 --> 19 --> 18 --> 9 --> 8 --> 4 --> 2 --> 1 1을 빼줄때만 +1을 해줌 느낀점 1에서 5000으로 올라갈때 최대한 빨리 올라가려고 재귀함수를 통해 5000에 가장 가까운 위치까지 간 후 백트래킹을 통해 조건을 만족시키려고 했다. 문제를 너무 어렵게 접근한 것 같다. 1에서 부터 시작해서 5000으로 가는 것이 ..

알고리즘 2022.02.26

프로그래머스 이진트리 문제

접근 방식(알고리즘 분류) 이진트리 내 풀이 #전위 순회 def pre(root, tree, now): global pre_result pre_result.append(now) if tree[root][0][0] != 0: pre(tree[root][0][0], tree, tree[root][0][1]) if tree[root][1][0] != 0: pre(tree[root][1][0], tree, tree[root][1][1]) #후위 순회 def post(root, tree, now): global post_result if tree[root][0][0] != 0: post(tree[root][0][0], tree, tree[root][0][1]) if tree[root][1][0] != 0: pos..

알고리즘 2022.02.26

프로그래머스 보석쇼핑 문제

접근 방식(알고리즘 분류) 투포인터 내 풀이 1차 풀이 def solution(gems): answer = [] idx = [] _len = len(set(gems)) for i in range(len(gems)): temp = set(gems[i:]) if len(temp) == _len: idx.append(i) for k in idx: for i in range(len(gems)-1, k-1, -1): if len(set(gems[k:i+1])) == _len: end = i answer.append([k+1,end+1]) return answer[0] solution(["AA", "AB", "AC", "AA", "AC"]) 1차 풀이 설명 우선적으로 [첫번째: 마지막] , [두번째:마지막] .....

알고리즘 2022.02.26