환경 로컬 : macOS Ventura 13.2.1 배포 서버 : Ubuntu 18.04.1 LTS IDE : IntelliJ IDEA Build Tool : Gradle 1. GCP 인스턴스 생성 > GCP 가입시 첫 3개월(90일)은 $300의 크레딧을 줍니다. AWS 사용해보신 분들이라면 프리티어 같은 개념으로 생각하시면 됩니다. GCP Console > 프로젝트 이름 클릭하여 진입 (프로젝트가 없다면 생성) 프로젝트에 Compute Engine API 사용 설정 VM 인스턴스 생성 옵션은 개인의 상황과 조건에 맞게 판단해서. > 처음 시도하시는 분들을 위한 변경사항은 다음과 같습니다. ✅ 리전 : 한국에서 진행하는 경우 asia-northeast3-a(서울)로 변경 ✅ 머신 유형 : e2-small로 다운그레이드 ✅ 부팅 디스크 - 운영체제 : Ubuntu (18.04 LTS) 생성 대기 후 인스턴스 실행
GDSC Sookmyung에서 Spring Security를 주제로 10분 세미나를 준비하게 되었습니다. 오탈자나 잘못된 정보가 있을 수 있으니 언제든지 제게 알려주세요! Trivia? 한국어로 하찮은 사실들, 여담이라는 의미를 가지고 있다. 얼마 전 캐나다에 어학연수를 다녀왔는데, 영어권 사람들은 이 Trivia라는 것을 굉장히 좋아한다고 느꼈다. 재밌을 것 같아서 주제로 가져와보면 어떨까 싶은 생각이 들었다. Spring Security 스프링의 큰 장점 중 하나는 고수준의 추상화이다. 즉, 내부에는 복잡한 로직이 있지만 우리는 그걸 일일이 다 알 필요가 없다. 그런 스프링의 장점이 많이 녹아있는 프레임워크 중 하나가 바로 스프링 시큐리티다. _스프링 시큐리티란 스프링
📌 사용자 레벨 관리 기능 추가 구현해야 할 레벨 시스템 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나. 처음 가입한 사용자는 BASIC 레벨 가입 후 50회 이상 로그인시 SILVER 레벨 SILVER에서 30번 이상 추천을 받으면 GOLD 레벨 레벨의 변경 작업은 일정 주기마다 일괄적으로 진행 (그때그때 ❌) Level 클래스 추가 각 레벨을 어떻게 저장할 지 생각해보자. 정수형(int)으로 저장하는 방법. ⛔️ 범위를 벗어나는 값이 들어갈 수도 있음 Enum 이용 >🗣 열거형(Enum) ✔️ Java5 이상부터 제공 ✔️ 열거형으로 선언된 순서에 따라 0부터 인덱스 값을 가짐 (순차적으로 증가) ✔️ 열거형으로 지정된 상수들은 모두 대문자로 선언 ✔️ 대표적인 메소드 3개 → values()
📌 초난감 예외처리 나쁜 예외처리 1. 예외를 잡기만 하고 아무런 처리를 하지 않는 경우 예외를 보고도 무시해버리겠다는 태도는 매우 나쁜 태도이다. 특히 자바, 스프링 개발자라면 더더욱 … 한 곳에서 발생한 예외가 캐스케이드되어 다른 곳에서 또 다른 에러를 일으킬 수 있다. 2. 예외 상황을 출력만 해주는 경우 예외가 발생했다는 것을 감지할 수는 있겠으나, 다른 디버깅 로그에 묻혀 놓칠 가능성이 크다. 예외를 처리할 때에 반드시 지켜야 할 핵심 원칙은 딱 하나다. 모든 예외는 적절하게 복구되어야 하며, 그게 아니라면 작업을 중단시키고 개발자에게 분명하게 통보되어야 한다. 3. 의미없는 throws throws Exception 을 쓰면 해당 예외를 무조건 던지게 된다. 하지만 실행 중 발생할 수 있지만 발생하면 안되는 예외와는 분명 구분되어야 한다. 결과적으로 적절한 처리를 통해 복구될 수 있는 예외 상황
Connection Pool > 💬 DB와 미리 연결해놓은 객체들을 받아놓는 웅덩이라는 의미에서 풀이라 한다. DB와의 불필요한 I/O가 감소하므로 성능 향상을 기대할 수 있다. Connection이나 PreparedStatement는 풀 방식으로 운영된다. 미리 정해진 풀 안에 제한된 수의 리소스(Connection, Statement)를 만들어두고, 필요할 때 이를 할당한 뒤 반환하면 다시 풀에 넣는 방식으로 운영된다. 요청이 매우 많은 서버환경에서는 매번 새로운 리소스를 생성하는 대신 미리 만들어둔 리소스를 돌려가며 사용하는 편이 훨씬 유리하지만, 사용한 리소스는 빠르게 반환해야 한다. (풀에 있는 리소스가 전부 고갈되면 문제가 발생하기 때문) → close() 메소드는 사용한 리소스를 풀로 다시 돌려주는 역할을 한다. 실제로 서비스 배포 후 DB 커넥션 풀이 꽉 차서 서버가 중단되는 사례도 있었다고 하니, 대규모 서비스를 구현한다면 놓쳐서는 안될
을 읽고 공부한 내용을 개인적으로 정리한 글입니다. 📌 테스트? 내가 예상하고 의도했던 대로 코드가 정확히 동작하는 지를 확인. 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있다는 자신감을 준다. 코드의 결함을 탐지해 수정하는 (=디버깅) 과정을 통해 코드의 무결성을 확보할 수 있다. 웹을 통한 DAO 테스트 방법의 문제점 DAO 테스트 과정을 생각해보자. 필요한 모든 웹 계층을 대강이라도 만들어두고, 웹 화면을 띄워 폼에 값을 입력한 뒤 등록 버튼을 누른다. 폼에 입력된 값은 파싱되어 User 객체가 되어 UserDao를 호출한다. 이처럼 단순 웹 기능과는 달리 DAO 테스트를 위해서는 DAO뿐만 아니라 서비스 클래스, 컨트롤러, 뷰 계층 등 모든 레이어의 기능을 다 만들고 나서야 테스트가 가능하다는 문제가 있다. 이 경우 테스트하고 싶은 기능은 DAO에 관한 기
을 읽고 공부한 내용을 개인적으로 정리한 글입니다. 💡 theme 관심사 분리 OoP IoC DI 📌 JDBC Java DataBase Connectivity의 약자. 자바 언어로 데이터베이스 프로그래밍을 하기 위한 라이브러리. JDK에서 DBMS에 종속되지 않는 JDBC API를 제공하며, 각 DBMS 회사에서 제공하는 JDBC 드라이버를 통해 DBMS와 연동하게 된다. 연동 과정 (간단하게만) 자바 상에서 Package 로드 → JDBC 드라이버 on → Connection, Statement 객체 생성 → Query 수행 → 쿼링의 결과로 반환된 Result 객체에서 데이터 추출 → Result, Statemt, Connection 순으로 객체 close 📌 DAO Data Access Object의 약자. 말 그대로 데이터에 접근하는 객체이다. DB 계층과 서비스 계