전체 글
-
인텔리제이 커뮤니티 버전에서 레거시 스프링외장 톰캣 실행하기자바(JAVA) 2024. 8. 23. 16:21
이클립스에서 외장 톰캣을 이용하여 작업하던 프로젝트들을 인텔리제이로 옮겨 사용하게 된 경우들이 있었다.이때 gradle과 스프링부트를 사용한 프로젝트라면 별도로 설정할 필요 없이 아래와 같이 잘 실행할 수 있다.인텔리제이 우측에 나타나는 gradle마크를 클릭하면 저런 버튼이 나온다. 이때 clean한 다음 build를 실행하면 war파일도 만들어지고 프로젝트를 위한 빌드도 끝이 난다. 하지만 레거시 스프링 Maven 또는 빌드 도구 자체가 없는 프로젝트라면..? 처음엔 굉장히 골치가 아팠다.검색 결과 다행히 방법은 있었지만 처음 찾은 것들은 대부분 인텔리제이 Ultimate 버전을 쓰는 경우였다.나의 경우 Community(무료 버전)만 사용 중이었기에 Ultimate버전에서 제공하는 Tomcat se..
-
트위터 소셜로그인 API 2.0 연동하기스프링(Spring) 2023. 9. 20. 22:57
트위터 API가 최근 2.0으로 바뀌었다. 그래서인지는 몰라도 API를 이용하는 것이 유료였고 방법도 구글이나 카카오 로그인과는 조금 다른 듯 했다. 검색해보니 한국어로 정리된 내용들은 대부분 과거 버전의 것이었고 그나마 있는 것들도 뭔가 내가 사용하는 것과는 잘 맞지 않았다. 영어로 검색했을 때 조차도 다른 소셜 로그인 대비 자료가 많지 않았다. 그래서 직접 영문 공식문서를 보고 따라하며 정리해보기로 마음먹었다.(뭐든 공식문서가 기준이 되는 것이 좋으니 더 좋은 시도라 생각한다) 수요가 적을 것 같지만 그래도 연동하는 누군가에게도 도움이 되었으면 좋겠다. [목표] 목표로 하는 것은 유저가 "트위터 계정에 로그인하여 액세스 토큰을 발급받고 해당 토큰을 이용해 유저의 기본정보를 요청하여 받아오기"이다. 기..
-
Read DB(SELECT), Write DB(UPDATE, DELETE, INSERT)DB 2023. 9. 4. 01:05
DB 연산에 대해 배우던 중 SELECT의 경우 다른 연산에 비해 더욱 시간이 걸린다는 것을 알았다. 그래서 보통 큰 시스템의 경우에는 CRUD의 Read만을 따로 담당하는 DB를 만들어 분기하는 경우가 있다. Write(UPDATE, DELETE, CREATE) 요청이 들어오면 Write DB로 연결시켜 연산을 처리하고 그 결과를 Read DB에 Replicate(복제)하는 방식이다. 반면 Read(SELECT) 요청이 들어오면 Read DB로 바로 연결을 시켜주는 것이다. 이를 위한 방법으로 우선 처음 연결할 때에 어떤 DB를 사용할 것인지를 알아야 한다. 자바에서 DB와의 연결을 위해 DataSource를 사용할 때라면 DB 연결 전 준비까지인 JDBC(자바에서 DB 연결을 위한 API)까지의 연동..
-
DB 성능차이에 대한 TipsDB 2023. 7. 29. 22:36
DB 성능을 조정하기 위한 여러가지 꿀팁들이 있겠지만 여기서 한 번 최대한 정리해보려한다. 1. 서브쿼리보다 join을 이용하는 것이 보통 더 빠르다! 그래서 보통 서브쿼리랑 JOIN문이 같이 있는 쿼리의 경우 더 빨리 끝나는 JOIN을 먼저 처리하고 서브쿼리는 나중에 처리하는 것이 좋다고 한다. # 예시 select a.* # 더 빨리 나오는 JOIN문을 먼저 처리하였다. , (SELECT count(*) test FROM testDB WHERE a.id = b.id) # 이렇게 생긴 것이 서브쿼리 from (SELECT 테이블1,컬럼1, 테이블2,컬럼2, 테이블3,컬럼3, ... FROM 테이블1 join 테이블2 # 조인문 on 테이블1.컬럼1 = 테이블2.컬럼2 join 테이블3 on 테이블1.컬..
-
객체의 동일성과 동등성CS 2023. 7. 28. 00:50
코드를 짜며 객체끼리 비교하는 데 ==연산자로 똑같다는 결과가 나오지 않는 경우가 있었다. 분명 둘은 같은 값을 담고 있었는데도 말이다. 그래서 찾아보니 객체의 동등성과 동일성이라는 개념이 있었다. 이에 대해 알아보자. 동일성(Identity) 완전히 같다는 의미, 두 객체가 완전히 같다는 것을 의미한다. 그런데 이렇게 설명하면 뭔가 부족하다. 이를 위해 객체를 좀 더 살펴보자. [객체] 객체는 기본적으로 생성 시 메모리에 주소를 갖게 된다. 메모리에는 다양한 영역이 있지만 그중 Heap 영역에 클래스의 인스턴스들의 실제값이 저장된다. 예를 들어 아래와 같은 코드가 있다 Coffee coffee = new Coffee("star coffee"); 이때 생성된 coffee라는 변수명을 위한 공간은 메모리의..
-
Serialization, 직렬화자바(JAVA) 2023. 7. 26. 23:50
자바 코드를 다루던 도중 살면서 처음으로 Serialization이라는 개념을 보았다. 가볍게 지나칠 수도 있었지만 나를 자극한 호기심을 충족하고자 정리해보겠다. (여담이지만 조사하다보니 꽤나 깊이있고 중요한 내용인 것 같았다.) 직렬화(Serialization)란? 쉽게 말하자면, 객체 데이터를 파일 형식으로 저장, DB에 저장, 메모리에 저장 하는 것 처럼 외부에 저장하기 위해 바이트 스트림 형태로 바꾸는 작업을 말한다. 이렇게 파일, DB, 메모리에 저장된 바이트들을 다시 객체로 변환하는 것을 '역 직렬화(De-serialization)'라고 일컫는다. 자바에서의 직렬화는 보통 1) 자바 기본(primitive) 타입이거나 2) java.io.Serializable 인터페이스를 상속받은 객체일 경우..
-
서버에서 '세션'이란?CS 2023. 7. 25. 01:00
서버에서 세션을 쓰는 것은 좋지 않다라는 조언을 들은 적이 있다. 기존에 로그인을 공부하며 쿠키, 세션, JWT에 대해서 가볍게 공부했었는데 세션에 대해서 좀 더 정리해보고자 한다. 왜냐면 개발을 하면서 무조건 하나만 쓰기 보단 그 기술의 특성을 잘 이해하고 적재적소에 활용하는 능력이 중요하기 때문. 세션(Session) 사용자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점까지 같은 사용자로부터 오는 일련의 요청을 하나의 상태로 보고 그 상태를 일정하게 유지하는 기술 (쉽게 말해 브라우저를 닫을 때 까지 유지된다.) [세션이 오고가는 Process] 사용자가 브라우저에서 서버로 요청을 보낼 때 Request Header의 Cookie에 별도의 세션아이디가 ..
-
ACM이란?Infra 2023. 7. 24. 00:37
일하면서 ACM 라는 단어에 대해 들었다. 어떤 것인지 한 번 조사해보겠다. Amazon Certificate Managemer, AWS 서비스 및 연결된 리소스를 통해 SSL/TLS 인증서를 프로비저닝하고 관리한다. 주로 HTTPS 설정할 때 많이 등장하는 개념이다. cf) 프로비저닝: Provision은 동사로 무언가를 공급한다는 뜻 / 서버, 애플리케이션, 네트워크 구성, 스토리지, 엣지 기기 등을 배포하는 초기 단계로써 인프라부분을 생성 및 설정하고 다양한 리소스에 대한 권한 설정, 데이터 액세스 관리 등 필요한 사전 작업을 하는 것을 말한다. (더욱 쉽게 말하면 필요한 서버에는 어떤 CPU가 필요한지, 배포 전에 어떤 소프트웨어나 WAS를 설치해야하는지, 개발자의 계정에는 어느 수준의 접근 권한..