본문 바로가기
반응형

SeongbinDB's IT Blog181

[스프링 시큐리티] 스프링 시큐리티 + Jwt 흐름 알기 Spring Security 직접 구현하는 과정보다는 전체적인 플로우 개념에 대한 이해를 중점으로 진행한다. https://github.com/seongbinko/simple-order-app config 디렉토리에서 상세 내용은 확인 가능하다. 인증(Authentication)과 권한(Authorization) 인증: Id,Pw를 입력 받아 로그인 하는 과정 자체 권한: 보호된 리소스에 접근 가능한지를 결정하는 것을 의미 인가(Authorize): 권한을 부여하는 작업을 인가 Spring Security 구조 UserDetailsService 실제 DB에서 사용자 인증정보를 가져오는 역할을 한다. UserDetails UserDeatils객체를 통해 권한 정보를 관리하기 때문에 UserDetails를 .. 2021. 7. 12.
TDD 방식으로 개발 예제 (Junit5) TDD 방식으로 개발 예제를 작성해 보았다. 로직 * - 점수가 70점 이상이면 PASS, 아니면 FAIL을 출력한다. TDD 방식 개발이 아닐 때 import java.util.Random; public class Example { public static void main(String[] args) { Random random = new Random(); for(int i = 0; i = 70) { System.out.println("PASS"); } else { System.out.println("FAIL"); } } } } TDD 방식으로 개발.. 2021. 7. 4.
[Java] JVM, 자바 메모리, GC JVM 자바 가상 머신 자바 컴파일러로 .java파일을 컴파일한 .class() 바이트코드를 OS에 맞게 실행해 주는 프로그램 JIT, 운영체제에 영향을 받지 않고 돌아가기 때문에 플랫폼에 의존하지 않을 수 있다. 가비지 컬렉션를 수행한다. 자바 메모리 영역 메소드(클래스, 스태틱(정적)) 영역 하나의 JAVA 파일은 크게 필드(field), 생성자(constructor), 메소드(method)로 구성된다. 그중 필드 부분에서 선언된 변수(전역변수)와 정적 멤버변수(static이 붙은 자료형) Static 영역에 데이터를 저장한다. Static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있게 된다. 다르게 말하면 전역변수가 프로그램이 종료될 때까지 어디서든 사용이 가능한 이유이기도.. 2021. 7. 3.
[Web] RESTful API란? RESTful API RestApi는 정보들을 주고 받는데 있어서 개발자들이 널리쓰이는 형식이다. 요청이 어떤 정보를 위한 것인지를 요청 그 자체로 추론 가능하다. URI로 정보의 자원을 표현하고, HTTP Method로 동작을 표현한다. URI 설계시 주의할 점 슬래시 구분자(/)는 계측 관계를 나타내는 것에 사용 posts/1/comments URI 마지막 문자로 슬래시(/)를 포함하지 않는다. (posts/1/가 아니라 posts/1로 표현한다.) 하이픈(-)은 URI 가독성을 높이는데 사용 (게시판이 자유 게시판이라면 free-board 로 가독성을 높힐 수 있다) 밑줄(_)은 URI에 사용하지 않는다. URI 경로에는 소문자가 적합하다. 파일확장자는 URI에 포함하지 않는다. HTTP METHO.. 2021. 7. 3.
[Spring] 스프링 개념 정리 Spring 11. 스프링은 무엇인가? 스프링은 좋은 객체지향 프로그래밍을 할 수 있게 도와주는 프레임워크이다. 12. 프레임워크 vs 라이브러리 프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞다. JUnit 라이프 사이클 속에서 내코드를 작성 어플리케이션의 flow를 누가 제어하는냐가 프레임워크인지 라이브러리인지 구분할 수 있다. 반면에 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 프레임워크가 아니라 라이브러리다. public static void main(String[] args) { new 함수 호출 등} 13. 스프링과 객체지향은 어떤 관계인가? 스프링의 IOC, DI는 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 스프링은 다음 .. 2021. 6. 30.
[Git, Github] 깃과 깃허브 비교 Git 분산형 버전관리 시스템이다. Github 깃으로 버전 관리한 코드들을 공유할 수 있고, 협업 할 수 있는 원격 저장소 Git의 역할 파일의 버전 관리(파일의 변경이력을 관리) 브랜치를 이용하면 완전히 구분되는 별도의 소스 작업영역을 만든다. 파일 변경이력정보가 사용자의 컴퓨터에 저장된다.(로컬저장소에 저장된다.) github와 같은 원격저장소를 활용하면 다른 개발자와 소스공유가 가능하다. Git 설정하기 명령어실행내용 git config --global user.name "사용자명" git의 전역 사용자명 등록 git config --global user.email "이메일" git의 전역 사용자의 이메일 등록 git config --global --list git 전역 설정 정보 조회 Git의 .. 2021. 6. 29.
객체 지향 프로그래밍이 정리 (OOP 정리) OOP 1. 객체지향 프로그래밍은 무엇인가? 객체 지향 프로그래밍은 어떤 속성과 동작을 가진 객체를 만들고, 객체들을 조립하여 하나의 프로그램을(상호작용을 하는) 만드는 방법을 객체지향 프로그래밍이라 한다. 2. 객체 프로그래밍의 장,단점 설명 장점 코드 재사용이 용이하다. 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장할 수 도 있다. 유지보수가 쉽다. 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야 하는 반면 객체 지향 프로그래밍은 수정해야 할 부분이 클래스 내부의 멤버 변수혹은 메서드로 있기 때문에 해당 부분만 수정하면 됨 프로그램을 유연하고 변경 용이하게 만든다. 단점 처리속도가 상대적으로 느림 객체가 많으면 용량이 커질 수 있음 설계시 시간과 노력이 필요 3... 2021. 6. 28.
[프로그래머스] 야근 지수 (level3) (파이썬) 문제 접근 정렬 된 최대 값이 필요하므로 우선순위큐로 표현해야 된다고 생각하였다 가장 빠른 삽입 삭제 시간복잡도 N(데이터) logN을 가진 힙(heap)을 이용하여 문제를 접근 풀이 코드 # 19:10 ~ 19:30 # https://programmers.co.kr/learn/courses/30/lessons/12927?language=python3# import heapq def solution(n, works): answer = 0 h = [] # 우선순위 큐 최대힙으로 저장 for value in works: heapq.heappush(h, -value) while n > 0: # 힙에서 하나 꺼내어 다시 넣음 work = -heapq.heappop(h) if work != 0: heapq.hea.. 2021. 6. 28.
인터넷 통신 (TCP/IP 4계층) TCP/IP 4계층 OSI 7계층 보다 보다 간소화 된 모델 애플리케이션 계층 - HTTP, FTP 전송계층 - TCP, UDP 인터넷 계층 - IP 네트워크 인터페이스 계층(랜카드, Mac등) (마지막 포장) 인터넷 통신 클라이언트, 서버가 인터넷 환경에서 통신하는 것 굉장히 복잡하므로 각자의 주소(IP)가 필요하다. 패킷 패키지와 , 버킷의 합성어 다중 포장한 선물 상자라 생각 IP (인터넷 프로토콜) 복잡한 인터넷 망에서 목적지를 찾을 수 있게 하는 주소다 지정한 IP 주소(IP Address)에 데이터 전달 패킷(Packet)이라는 통신 단위로 데이터 전달 100.100.100.1(클라이언트 패킷 전달) → 200.200.200.2 (서버 패킷 전달) → 100.100.100.1 한계 비 연결성 .. 2021. 6. 28.
JUnit5 정리 테스트 코드 프레임워크 Junit5 자바의 테스트 코드 작성을 도와주는 프레임워크 @Autowired 필드 주입 방식 사용 이유 테스트 프레임워크에서는 생성자 매개변수 관리를 Jupiter가 담당한다. 그래서 생성자 주입이나 롬복을 사용시에 parameterResolver를 찾아도 나오질 않으므로 에러를 뱉는다. @Autowried를 명시적으로 선언하면 Jupiter가 Spring Container에게 빈 주입을 요청할 수 있게 되어 코드 작성이 가능하다. 추후 계속 업데이트 예정 2021. 6. 28.
TDD , 단위 테스트, 리팩토링 TDD 테스트가 주도하는 개발 요구사항이 급변하는 개발문화에 적합한 개발방법론 테스트코드를 먼저작성한다. Red → Green → Refactor 사이클 실패하는 테스트를 먼저 작성하고, 테스트가 통과하는 코드를 작성하고, 통과하면 프로덕션 코드를 리팩토링 한다. 단위 테스트 코드 (Unit test) TDD 첫번째 단계인 기능 단위의 테스트 코드를 작성하는 것 TDD와 달리 테스트 코드를 먼저 작성해야 하는 것도 아니고, 리팩토링도 포함되지 않는다. 장점 빠른 피드백 기존방식 코드작성 Tomcat 실행 Postman과 같은 API 테스트도구로 HTTP 요청 System.out.println()으로 눈으로 검증 결과 다르면 Tomcat중지하고 코드 수정 코드수정시마다 톰캣을 다시 실행하는 시간을 줄일 수.. 2021. 6. 28.
[프로그래머스] 더 맵게 (level2) (파이썬) 문제 접근 힙의 특징을 이용하여 문제를 푼다. 문제 해결 # 09:30 ~ 09:55 # https://programmers.co.kr/learn/courses/30/lessons/42626?language=python3 # 정렬 시간 복잡도 NlogN, 삽입 삭제 logN # heapq.heappush() 삽입 # heapq.heappop() 꺼냄 import heapq def solution(scoville, K): # 모든 음식의 스코빌 지수를 K이상으로 만들 수 없는 경우 -1 return answer = -1 count = 0 flag = True h = [] for value in scoville: heapq.heappush(h, value) # pop 하면서 스코빌 지수와 체크 하며 섞을지 .. 2021. 6. 28.
[프로그래머스 ] 짝지어 제거하기 (level2) (파이썬) 문제 접근 스택에 쌓으면서 짝이 지어지면 바로바로 제거하는 방식을 선택하였다 풀이 코드 # https://programmers.co.kr/learn/courses/30/lessons/12973?language=python3 # 9:40 ~ 09:52 def solution(s): answer = -1 stack = [] for i in s: if len(stack) != 0: if stack[-1] == i: stack.pop() else: stack.append(i) else: stack.append(i) if len(stack) == 0: answer = 1 else: answer = 0 return answer 2021. 6. 21.
[프로그래머스] Summer/Winter Coding(~2018) 소수 만들기 (파이썬) 문제 접근 소수의 판별을 할 줄 알면 풀 수 있던 문제 에라토스테네스의 체를 기억하자 2021.03.08 - [Problem-solved (코딩테스트 문제풀이)/python] - [백준] 소수 구하기 1929 (파이썬) # Summer/Winter Coding(~2018) 소수 만들기 import math from itertools import combinations def solution(nums): # 에라토스테네스의 체를 이용하여 해당 범위의 소수를 판별한다. # 1~1000 사이의 자연수를 3개 고르므로 단순히 합의 최대값을 3000이라고 설정하였다 n = 3000 array = [True for i in range(n+1)] for i in range(2, int(math.sqrt(n) + 1).. 2021. 6. 18.
[프로그래머스] [Sql] [Oracle] 헤비 유저가 소유한 장소 (level3) https://programmers.co.kr/learn/courses/30/lessons/77487 코딩테스트 연습 - 헤비 유저가 소유한 장소 PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 programmers.co.kr 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 기출문제이다. 지난 번에 참여했을 때 풀었었는데 다시한번 풀어보았다. JPA를 사용하면서 sql을 직접 다루지 않다보니 많이 까먹긴 하였다. 내가 푼 풀이 (Group by + Subquery) select A.id, A.name, A.host_id fr.. 2021. 6. 14.
반응형