전체글 143

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 5장 스프링 시큐리티

스프링 시큐리티란? 인증(Authentication)과 인가(Authorization) 기능을 가진 프레임워크이다. 보안을 위한 표준이며, 인터셉터, 필터 보단 스프링 시큐리티를 통해 구현하는 것을 권장하고 있다. config.auth 패키지 시큐리티 관련 클래스는 이곳에 있다. 어노테이션 기반으로 개선하기 같은 코드가 반복되는 나쁜 코드를 개선해보자. 유지보수성이 떨어지는 것을 어노테이션으로 작성해서 바꿔보기! (직접 어노테이션을 만들 수 있다.) 세션 저장소로 DB 사용하기 세션이 내장 WAS의 메모리에 저장되므로, 애플리케이션을 재실행 하면 로그인이 풀린다. (항상 초기화된다.) 이는 배포될 때마다 톰캣이 재시작 되는 것이며, 2대 이상의 WAS가 구동되는 환경에선 세션 공유를 위한 추가 설정이 필..

알고리즘 - 재귀란?

❗ 학습 키워드 코드 1 def look_for_key(main_box): pile = main_box.make_a_pile_to_look_through() while pile is not empty: box = pile.grab_a_box() for item in box: if item.is_a_box(): pile.append(item) elif item.is_a_key(): print("열쇠를 찾았어요!") 코드 2 def look_for_key(box): for item in box: if item.is_a_box(): look_for_key(item) elif item.is_a_key(): print("열쇠를 찾았어요!") 이 코드들은 같은 일을 하는 함수를 구현한 것이다. 함수 1은 반복문으로..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 4장 머스테치

✍학습 키워드 서버 템플릿 엔진이란? 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 이야기한다. JSP, Freemaker등이 있다. 서버 템플릿 엔진을 이용한 화면 생성은 서버에서 Java 코드로 문자열을 만든 뒤 HTML로 변환하여 HTML로 전달한다. 자바 진영에는 JSP, Thymeleaf 등의 스프링 진영에서 사용할 수 있는 서버 템플릿 엔진들이 있다. 📝새로 배운 개념 템플릿 엔진(머스테치)의 기본 위치 src/main/resources/templates 이다 @Transactional(readOnly = true) 트랜잭션 범위는 유지하되, 조회 기능만 하도록 설정하여 조회 속도가 개선된다.

[백준] 4949: 균형잡힌 세상 (Pyhton)

4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에 www.acmicpc.net 1. 문제 접근 방식 보통 이런 문제는 스택을 이용한 풀이가 정석이다. 2. 문제 풀이 - 스택 사용 blank = ['(', '['] def check_len(stack): if len(stack) > 0: return True return False while True: S = input().rstrip() if S == '.': break else: stack = list() for i in S: if i == ')': if check..

[백준] 1966: 프린터 큐 (Pyhton)

1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 1. 문제 접근 방식 큐를 이용하고, 문제의 조건에 충실하여 시뮬레이션 했다. 그러다보니 조금 코드가 길어진 감도 있긴한데, 직관적이어서 보기는 좋은거같다. 2. 풀이 코드 from collections import deque def solution(N, M, im): queue = deque() answer = 0 find = '' count = 1 for i in range(0, N): if i == M: find = chr(ord('A') + i) D = {c..

[백준] 11866: 요세푸스 문제 0 (Python)

11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제보고 이게 먼소린가 싶다냐.. 해서 그려보았다. 문제 분석할때 종이에 슥슥 써보는건 좋은습관인거 같다. 이렇게 그려보니까 무슨 문제인지 바로 파악이 되었다.( 악필 죄송 합니다 ) 그리고 이 문제를 해결하기 위해선 큐를 사용하는게 효율적이라는 것도 깨닫게 되었다. 큐를 사용해서 K와 다른 숫자는 다시 뒤로 append하고, 그 수만 pop한다음에 리스트에 추가하면 수열이 완성되는 방식이었다. FIFO인 큐 자료구조를 문제에 해결방식으로 떠올려서 그걸 이용해 문제를 해결하는게 핵심이었던거 같다. from collections import dequ..

코딩테스트 기본 자료구조(Python) - 딕셔너리

✍학습 키워드 딕셔너리? 사전이라는 의미이며, 데이터를 키(key) : 값(value) 형식으로 저장할 수 있는 자료구조이다. 키 값은 immutable 객체 타입이 와야한다. 키 값은 중복될 수 없다. 동일한 키를 추가하면 기존의 키와 값이 나중에 추가된 키와 값으로 변경된다( 이건 몰랐지! ) 📝새로 배운 개념 활용법 딕셔너리 values의 합 구하기 D = dict() for each in lists: D[each] = 23 answer = sum(D.values()) # value의 값이 합쳐서 리턴된다. 딕셔너리 정렬방법 # 1. sorted와 items() 이용 D = dict() D1 = dict(sorted(D.items())) #2. 람다 이용 answer = list(D.items())..

파이썬 코테 라이브러리 정리

✍학습 키워드 1. itertools 라이브러리 ⇒ 순열과 조합을 쉽게 구현할 수 있는 라이브러리. from itertools import permutations x = ['a', 'b', 'c'] y = list(permutations(x, 2)) print(y) #[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')] permutations 함수는 ‘a’, ‘b’, ‘c’에서 2개를 뽑아 나열하는 모든 순열을 리턴해준다. from itertools import combinations x = ['a', 'b', 'c'] y = list(combinations(x, 2)) #[('a', 'b'), ('a', 'c'), ('b', ..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 3장 JPA

✍학습 키워드 JPA? 자바 표준 ORM이다. ORM은 객체를 매핑하는 것 MyBatis, iBatis는 SQL Mapper이며 쿼리를 매핑하는 것이다. JPA는 인터페이스로서 Hibernate같은 구현체가 존재한다. Spring Data의 하위 프로젝트들은 save(), findAll(), findOne() 등을 인터페이스로 갖고 있어 저장소가 교체되어도 기본적인 기능은 변경할게 없다. 여러 성능 이슈 해결책들을 준비해놓은 상태이기 때문에 네이티브 쿼리만큼의 성능을 낼 수 있다. Entity 클래스에서는 절대 Setter 메소드를 만들지 않는다. 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분할 수 없기 때문이다. JPA의 영속성 컨텍스트 example.update(r..

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 2장 테스트 코드

✍학습 키워드 TDD와 단위 테스트 ( Unit Test )는 다른 이야기다. TDD는 테스트가 주도하는 개발 ⇒ 테스트 코드를 먼저 작성한다. 단위테스트는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것이다. 테스트 코드를 작성하면 빠르게 피드백 해서 sout으로 찍어보거나 굳이 톰캣을 내렸다 올렸다 할 필요가 없다! 테스트 코드로 검증 후, 못믿겠으면 수동으로 검증하는 것이다. 일반적으로 테스트 클래스틑 대상 클래스 이름에 Test를 붙인다. 📝새로 배운 개념 @SpringBootApplication 이 어노테이션으로 스프링 부트의 자동 설정, 스프링 Bean 일긱와 생성을 모두 자동으로 생성해 준다. 여기서부터 설정을 읽어가기 때문에 항상 프로젝트의 최상단에 위치해야만 한다! 롬복 ..