본문 바로가기

전체 글149

[간단 정리] SOLID 원칙 SOLID 원칙이란, JAVA에서 객체 지향 프로그래밍을 위해 고안된 5가치 주요 원칙을 의미한다.1. SRP (단일책임의 원칙)정의된 클래스는 하나의 책임(기능)만 가지도록 설계되어야 한다.여기서 책임이란, 클래스가 특정 메서드를 알고 있다는 것이다. 특정 메서드를 여러 클래스가 알고 있다면 SRP에 어긋난 코드라고 말할 수 있다.클래스를 변경하는 이유는 단 하나여야 한다.SRP를 준수하기 위해서는 각 클래스가 가진 책임을 최대한 분리하여야 한다.2. OCP (개방폐쇄의 원칙)클래스나 메서드는 확장에는 열려있고 변경에는 닫혀 있어야 한다.기존의 코드를 변경하지 않고도 기능을 수정하고 추가할 수 있어야 한다.OCP를 준수하기 위해서는 추상화와 다형성에 대해 이해하는 것이 중요하다.3. LSP (리스코브 .. 2024. 11. 8.
[AnswerDev] 6. 돌아보기 8월부터 시작한 단기간 프로젝트가 다 끝났다.하루에 한 시간씩 깔짝거린 프로젝트라서 뭐 회고라고 할 것도 없는데, 그래도 프로젝트를 하면서 느낀 점은 써둬야 하지 않을까 해서 대충 적어보려고 한다.(사실 프로젝트 끝은 8월 말에 다 끝냈는데 이제서야 정리하고 회고를 하게 되었다... 좀 부지런해져야 할 필요가 있을 듯)프로젝트를 시작하기 전 느낀 점일단 나는 평소에 Studocu 사이트를 굉장히 유용하게 활용하고 있었다.답지를 따로 구매하기에는 가격이 꽤 부담되고... 그렇다고 푼 문제를 채점하지 않는 것은 문제를 푼 의미가 없어지니까. 그래서 전 세계 대학생들이 문제를 해결한 자료나 답지를 공유하는 사이트인 Studocu를 굉장히 편리하다고 생각했다. 그런데 Studocu를 사용하다 보면, 어느 시점부.. 2024. 9. 12.
[AnswerDev] 5. 동적 페이지 크롤링 using Selenium 이제 웬만한 환경 설정은 완료했고, Studocu 사이트에서 답지를 크롤링해서 내 페이지에 띄우면 된다.사실 다른 기능들은 별로 필요가 없기 때문에 이 기능만 구현되면 이 프로젝트는 그냥 끝이다...물론 다른 부가적인 기능들을 넣으려면 넣을 수는 있겠지만, 큰 필요는 없을 것 같아서 그냥 핵심 기능(크롤링 후 띄우기)만 구현하기로 했다. 우선 이 글을 쓰는 2024. 09. 11. 현재 Selenium의 최신 버전은 4.24.0버전으로, 크롬 드라이버를 사용할 경우 크롬 v128버전까지 지원한다.마침 내가 사용하는 크롬 버전이 v128으로 가장 최신 버전이었기에, 나는 Selenium 4.24.0을 바로 build.gradle에 추가해 주었다.// build.gradleimplementation grou.. 2024. 9. 11.
[간단 정리] Java ArrayList vs LinkedList ArrayList: 배열 기반인덱스로 요소에 접근 가능하므로 접근 시간이 빠르다.요소의 추가/삭제 시간이 느리다. (순차적)LinkedList: 연결 리스트 기반연결 리스트로 하나 하나 요소를 찾아가야 하므로 접근 시간이 느리다.맨 뒷단에 새로운 요소를 추가하기만 하면 되므로 요소의 추가/삭제 시간이 빠르다. (비순차적) 2024. 9. 8.
[간단 정리] Git Merge 방식 Git을 사용하는 이유는 당연하게도 다양한 브랜치를 만들어 유연하게 코드를 작성하기 위해서이다.그러나 셀 수 없이 많은 브랜치를 만들어 그 브랜치들을 모두 Merge한다면...? 코드의 히스토리는 매우 지저분해질 것이다. 그래서 Git에서는 여러 Merge 방식들을 제공하고 있는데, 대표적으로 아래 3가지가 있다.Merge : 일반적인 Merge 방식. 브랜치의 모든 커밋 내역들이 main 브랜치에 함께 Merge된다.3-Way Merge: main 브랜치에 수정 내역이 있는 경우, 수정된 main의 커밋 + Merge하려는 브랜치의 커밋을 한 새로운 커밋 내역 생성Fast-Forward Merge: main 브랜치에 수정 내역이 없는 경우, 그냥 main 브랜치 맨 뒤에 MergeSquash Merge.. 2024. 9. 1.
[AnswerDev] 4. @Async 비동기 처리와 Security Context 나는 가능한 한 모든 기능을 비동기로 구현하고 있다.어찌됐건 비동기로 처리하는 게 항상 빠르니까... 오류가 나면 처리하는 식으로 하고 있다. 그런데 여기서 문제는 @Async 비동기 처리를 사용하면, 각 작업마다 새로운 스레드를 만들어서 동작하기 때문에 하나의 스레드에서 만든 Security Context에 다른 스레드는 접근할 수 없다.그래서 현재 접속 정보인 Authentication 데이터에 접근할 수 없는 문제가 있었다. 그러면 어떻게 해줘야 할까?스레드 사이에서 Security Context를 공유할 수 있는 스레드 Executor인 DelegatingSecurityContextAsyncTaskExecutor을 사용해서 스레드 풀을 만들어주면 된다.// AsyncConfig.java@Enabl.. 2024. 8. 17.
반응형