개발 47

SQL 기본 문법

*해당 문서는 Oracle을 기본으로 하고 있습니다. 명령어 종류 명령어 설명 데이터 조작어 (DML : Data Manipulation Language) SELECT INSERT UPDATE DELETE 데이터 제어어 (DCL : Data Control Language) GRANT REVOKE 데이터 정의어 (DDL : Data Definition Language) CREATE ALTER DROP RENAME TRUNCATE 트랜젝션 제어어 (TCL : Transaction Control Language) COMMIT ROLLBACK SAVEPOINT - 테이블 생성과 데이터 조회 / 입력 / 수정 / 삭제 CREATE TABLE 테이블명 ( 칼럼명1 데이터 유형 [제약조건], 칼럼명2 데이터 유형 [..

개발/Etc 2023.06.13

스프링 HTTP 헤더와 요청 파라미터 조회하는 방법

1. @Controller에서 헤더 정보 가져오기 헤더 정보가 필요한 경우가 많은데 스프링 @Controller에는 파라미터를 통해 헤더뿐만 아니라 많은 정보를 가져올 수 있다. 사실 자주 사용하는 것만 기억나고 가끔 쓰게 되는 건 찾아보게 된다. 아래 공식 매뉴얼 참고. @RequestMapping("/headers") public String headers( HttpServletRequest reqeust, HttpServletResponse response, HttpMethod httpMethod, // method 정보 Locale locale, // 위치 정보 @RequestHeader MultiValueMap headerMap, // 모든 헤더 정보 @RequestHeader("host") S..

개발/Java|Spring 2023.04.10

스프링 핵심원리 기본 - IoC, DI, ApplicationContext, 의존관계 주입 등

아주 오랜만에 김영한님 강의를 핵심원리부터 다시 보기 시작했다. 기본적인 내용이지만 다시 들어보니 머릿속이 좀 정리가 되는 기분이다. 그 땐 몰랐는데 다시 보니 팍팍 꽂히는 내용도 수두룩하다. 도대체 처음 듣던 당시엔 뭘 이해했던 건가 싶어 자괴감이 들기도... 그래도 그간 줏어듣고 코드 쫌 깨작거렸다고 이해도가 약간은 올라갔나보다. 또 돌아서면 까먹을 게 뻔하니 조금이라도 기록하고 남겨보자. 내용이 방대해서 부분적으로 발췌하고 요약했다. 1. 제어의 역전(IoC) 스프링은 좋은 객체 지향 설계를 위해 역할과 구현을 분리시킬 수 있는 많은 방법을 제공하는데, 그 중 가장 기본적이고 좋은 도구가 바로 DI 컨테이너이다. 구현 객체는 자신의 로직을 실행하는 역할만 담당하고 프로그램의 제어 흐름은 스프링이 맡..

개발/Java|Spring 2023.04.06

좋은 객체 지향 설계의 5가지 원칙 SOLID

SOLID 원칙 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP(Single Responsibility Principle) 단일 책임 원칙 OCP(Open/Closed Principle) 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) 리스코프 치환 원칙 ISP(Interface Segregation Principle) 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) 의존관계 역전 원칙 SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단..

개발/Java|Spring 2023.03.29

javascript에서 onclick과 addEventListener 차이점(+이벤트 캡처링 vs. 버블링)

자바스크립트 onclick과 addEventListener를 둘 다 사용하다가 문득 두 메서드의 차이가 궁금해져서 간략히 정리해 본다. onclick - 단일 콜백 함수(리스너)만 지정 사용 가능 - 하나의 이벤트만 사용하므로 중복될 경우 앞선 이벤트를 덮어씀 - 거의 모든 브라우저에서 작동 - 구형 IE(9 이하)에서도 동작 addEventListener - 모던 자바스크립트로 넘어오면서 새롭게 추가 - 이벤트 중첩이 가능함 - 여러 개의 이벤트를 등록해도 모두 동작(덮어쓰지 않음) - IE9 이상 거의 모든 브라우저에서 작동 - 이벤트 전파 단계(캡처링 vs. 버블링) 조절 가능 (3번째 options 매개변수) 이벤트 캡처링 vs. 버블링 (Propagation) 기본값은 버블링 = {capture..

개발/Javascript 2023.03.29

토이프로젝트 Plus Typo

토이프로젝트를 하나 완성했다. 앞으로 수정하고 업데이트 할 일이 많아보이는데, 조급해하지 않고 천천히 하려고 한다. 의식의 흐름대로 쓴 작업 수기는 이미 네이버 블로그에 올렸기 때문에 여기선 거기서 못 다 한 로고 애니메이션을 코드와 함께 풀어볼까 한다. 완성된 사이트 : http://typo.co.kr/ Plus Typo Combine photos and text to create an image for Instagram. typo.co.kr 이전에 리액트를 깨작거리면서 자바스크립트에 대한 갈증이 많이 생겼었다. 자바스크립트도 잘 모르는데 대뜸 리액트부터 들이박다보니 너무 많이 허둥댔던 기억이 난다. 그래서 이번에 html, css과 함께 바닐라 자바스크립트만 가지고 작업을 마무리 했다. 어차피 Nod..

개발/Etc 2023.03.20

Builder 패턴과 Lombok @Builder 사용 시 주의사항

자바 개발을 하다보면 대부분 Lombok을 사용하여 개발 편의성을 올리곤 한다. Lombok이 편한 건 맞지만 @Data 어노테이션을 잘못 사용했다간 객체 생성부터 어긋나기 시작해 버린다. Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value를 모두 한번에 적용하는데, 위험하지 않은 게 이상한 일이다. 무분별한 Setter 사용과 ToString으로 인한 순환 참조 문제 등 @Data나 @Setter 어노테이션의 위험성은 익히 알려져 있는 것 같은데, 함께 많이 쓰는 @Builder 어노테이션에 대해서는 상대적으로 위험성이 덜 알려진 거 같다.(내 기분이..) 나처럼 하수들이 막 쓰면 안될 정도로 '이거 좀 위험한데' 싶은..

개발/Java|Spring 2023.02.20

대량 이미지 동일한 사이즈로 분할하기(JAVA)

웹툰처럼 세로로 엄청나게 긴 대량의 이미지를 동일한 사이즈로 분할해야 하는 상황이 발생했다. 이미지 편집 도구를 사용해도 되지만, 세로 길이가 10만 픽셀이 넘어가는 이미지를 일단 불러오는 것조차 버벅거리며 문제가 된다. 이런 반복적이고 간단한 로직에는 역시 기계만큼 든든한 게 없다. 그래서 이미지를 자르는 프로그램을 Java로 간단하게 만들어서 해결했다. 일단 결과 샘플을 먼저 보고 전체 코드를 살펴보자. 작업 샘플 이미지 샘플용으로 인터넷에 돌아다니는 유튭 캡쳐짤을 하나 줏어왔다. 윗부분만 짤라놔서 짧아보이지만, 실제로는 세로 길이가 2만 픽셀이 넘는 이미지이다. 이걸 프로그램에 넣고 돌리면, 이렇게 나온다. 젤 위에 한 컷을 썸네일/표지 용으로 한 컷 자르고, 나머지를 장당 4컷이 들어가도록 이미지..

개발/Java|Spring 2023.02.13

JWT 토큰 라이브러리 java-jwt와 jjwt 간단 비교

경험이 많지 않아 단언할 순 없지만, REST 아키텍처로 웹 서비스를 만들다 보면 대부분 토큰 인증 방식을 스프링 시큐리티에 접목하게 된다. 클라우드 서비스를 이용하는 추세를 보면, 세션 인증 방식보다 서버 분산 등 확장성에 더 좋은 토큰 인증 방식을 선호하게 된다. 서버를 여러대 두거나, 같은 사용자가 서로 다른 도메인 데이터를 요청할 경우 세션 유지를 위한 처리(비용)이 증가하기 때문이다. 그래서 토큰을 통해 사용자의 모든 요청을 확인하는 방식을 적용하는데, 이 때 JWT 토큰을 많이 사용한다. JWT를 학습하다보면, JWT 라이브러리에도 다양한 선택지가 있다는 것을 알 수 있고, 그럼 이제 뭘 선택해야 할지 고민에 빠지게 된다. 이 글은 그 고민의 결과물이다. java-jwt와 jjwt Json W..

개발/Java|Spring 2023.02.09

Spring Security JWT 토큰으로 인증하기

[환경] Java8 SpringBoot 2.7.7 with Gradle Spring Security 5.7.6 세션(Session) 인증 방식 장단점 JSESSIONID는 서버에서 세션(사용자) 정보를 찾는 Key로만 활용한다. 그 자체로는 개인정보가 들어 있지 않지만, 세션하이재킹 공격을 당할 수 있기때문에 절대적으로 안전하지는 않다. 서버에 세션 정보를 저장할 공간이 필요하다. 분산 서버에서는 세션을 공유하기 어렵다. 토큰(Token) 인증 방식 장점) 세션을 관리할 필요가 없어 별도의 서버 저장소가 필요없다. 서버 분산이나 클러스터 환경처럼 확장성에 좋다. 단점) 한 번 제공된 토큰은 회수가 어렵다. 세션은 서버의 세션 정보를 삭제하게 되면 클라이언트 브라우저의 JSESSIONID는 사용할 수 없게..

개발/Java|Spring 2023.02.07
728x90
반응형