본문 바로가기
반응형

전체 글139

[Spring] Filter, AOP, Interceptor 그리고 Middleware 실무에서 개발하면서 찾아봐야지~ 찾아봐야지~ 했던 filter, aop, interceptor 부분을 드디어 공부해본다! 차이점 미리보기특징FilterAOPInterceptorMiddleware적용 레벨HTTP 요청/응답메서드/클래스컨트롤러 전후요청/응답주요 사용 사례보안, 로깅트랜잭션, 로깅인증, 데이터 가공요청 처리프레임워크 종속성낮음높음(Spring 등)높음(Spring MVC)높음 (Spring Boot)설정 위치web.xml/Java ConfigBean 등록Handler 설정Spring Config코드 복잡도중간높음중간낮음요약Filter는 주로 HTTP 요청/응답을 다루며, 프레임워크에 종속되지 않아 표준적이다.AOP는 메서드 수준의 로직 분리에 적합하며, 코드 재사용성과 유지보수성이 뛰어나다... 2025. 1. 2.
[Algorithm] 시간복잡도 (amortized time complexity) 알고리즘을 좀 제대로 공부해보기 위해서 일요일이지만 공부 도저어언! 시간 복잡도 (amortized time complexity)시간 복잡도는 알고리즘이 실행되는 동안 걸리는 시간을 입력 크기 n에 따라 측정하는 방식이다. 간단하게 말하면, "데이터 크기가 커질수록 알고리즘이 얼마나 느려지는지"를 나타낸다.계산 과정기본 연산 찾기: 알고리즘에서 가장 자주 반복되는 핵심 연산(덧셈, 비교, 곱셈 등)을 찾는다.반복 횟수 세기: 이 기본 연산이 몇 번 실행되는지 n에 대해 식을 세운다.가장 큰 영향 찾기: 계산 결과에서 입력 n이 커질수록 지배적인 항(가장 빠르게 증가하는 항)만 고려한다.상수 제거: 상수는 무시한다. (예: 3n^2 + 5n + 10 -> O(n^2))대표적인 종류O(1): 상수 시간. 입.. 2024. 12. 31.
[나혼자공부] 4주차 복습-2 오늘도 힘내자!오늘의 공부 내용내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...!직렬화 과정에서 serialVersionUID의 역할은 무엇인가요?내 답변: serialVersionUID는 클래스의 고유 ID로 직렬화 및 역직렬화 과정에서 사용됩니다. 자바는 클래스의 구조가 변경되었는지 확인하기 위해 직렬화된 객체의 serialVersionUID를 비교합니다. 동일하면 역직렬화 성공하고 다르면 InvalidClassException 예외가 발생됩니다.왜 Serializable을 구현해야 할까요?내 답변: Serializable 은 클래스가 직렬화 가능하다는 것을 나타내는 인터페이스입니다. 자바에서 직렬화는 Serializabl.. 2024. 12. 26.
[나혼자공부] 4주차 복습-1 으아아아 뭔가 많아아아아오늘의 공부 내용내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...! 스레드 생명주기를 설명해 주세요.내 답변: 스레드 생명주기는 다섯가지 상태로 나눕니다. 첫번째는 New일때 인데요 스레드 객체가 생성되었지만 아직 시작되지 않은 상태입니다. start() 메소드가 호출되 면 Runnable상태로 들어가는데요 실행 대기열에 등록되고 실행 가능한 상태입니다. 이후에는 JVM의 스케쥴러에 의해 CPU를 할당 받으면 Running 상태로 들어갑니다. 실행중 잠시 멈춰야하는 상황이 발생하면 Blocked 상태가 됩니다. 스레드의 실행이 끝나면 Terminated 상태가 됩니다.스레드 풀의 스레드들이 작업을 처리하.. 2024. 12. 25.
[JAVA] 불변객체, 가변객 뭔지는 알겠는데 자세히 좀 더 알아보자 음 String은 불변이고 StringBuffer 랑 StringBuilder는 가변이래 알겠어 알겠는데 그래서 구조랑 뭐 데이터 할때 어케하는건데!?일단 정의 부터 알아보자!불변 객체란?객체가 한 번 생성되면 그 상태를 변경할 수 없는 객체이다.대표적인 예: String, Integer, LocalDate 등.불변 객체의 장점안정성과 스레드 안전성상태가 변하지 않으므로 여러 스레드에서 동시에 사용해도 안전하다.추가적인 동기화 없이 읽기 전용 데이터로 활용할 수 있다.예: String은 여러 스레드에서 공유될 때 안전하게 사용할 수 있음.설계상태가 변하지 않으므로 객체의 상태를 추적하거나 변경을 고려할 필요가 없다.디버깅과 유지보수가 더 쉬워진다.해시 기반 컬렉션과의 호환성HashMap이나 HashSet.. 2024. 12. 25.
[JAVA] LinkedList 알꺼같으면서도 모르겠다. 면접에서 가장 자주 나오는 개념인 LinkedList인데... 아는거 같으면서도 잘 모르겠는 부분이 많아서 질문 받아서 대답하면 어버버버 한다... 오늘 해결해보자!오늘의 한줄 요약: LinkedList 에서 데이터를 찾는 방법은 순차 탐색(Sequential Search)을 기반으로 이루어진다!LinkedList의 구조 이해LinkedList는 노드(Node)들의 연결로 이루어져있다.각 노드는 두가지 요소를 가지고 있음!데이터(Data): 노드가 저장하고 있는 실제 값.포인터(Next): 다음 노드를 가리키는 참조데이터를 10 -> 20 -> 30 순서로 저장한 LinkedList는 아래와 같다아:[10 | Next] -> [20 | Next] -> [30 | Null]Head: List의 시작 노드를.. 2024. 12. 23.
[JAVA] 타입 캐스팅 시 발생하는 오버플로우? Java에서는 타입 캐스팅을 수행할 때, 특히 정수형 데이터를 더 작은 크기의 정수형으로 캐스팅할 때 오버플로우가 발생할 수 있다.JVM 내부에서는 이 오버플로우를 특별히 에러로 처리하지 않고, 단순히 값의 하위 비트만 취하는 방식으로 처리한다! 처리 과정비트 자르기더 큰 정수형 데이터를 더 작은 정수형으로 캐스팅하면, 상위 비트를 잘라내고 결과적으로 잘린 하위 비트만 새로운 값으로 사용한다.예를 들어, int를 byte로 변환할 때, int의 하위 8비트만 유지된다.값의 손실상위 비트를 잘라내는 과정에서 정보가 손실될 수 있다.오버플로우나 언더블로우와 관계없이 자바는 이를 단순히 값 변환으로 간주한다.2의 보수 연산 규칙 적용정수는 자바에서 2의 보수 표현을 사용하므로, 하위 비트를 유지한 결과가 2의.. 2024. 12. 22.
[나혼자공부] 3주차 복습-2 으아ㅏㅏ 너무 많아ㅏㅏ 공부할껀 왜 매일매일 생기고 왜이렇게 많은걸까 그래서 행복해!오늘의 공부 내용스트링의 각 캐릭터를 어떻게 개별적으로 접근할 수 있나내답변: String은 객 문자를 char[]로 저장하므로 각 문자에 개별적으로 접근할 수 있습니다. java에서는 charAt() 메서드를 제공하고있고 이 메소드를 사용해서 각 문자를 가져올 수 있습니다.  java9 이후로는 byte[]배열 저장으로 변경하였다. new String으로 생성된 객체와 스트링 리터럴의 비교 시, equals와 == 연산자의 동작 차이내답변: new String으로 생성된 객체는 스트링 풀에 있는 객체 여부 상관없이 Heap 영역에 새로운 객체를 생성하므로 객체의 참조 을 비교하는 == 연산자 사용시는 false가 나오고.. 2024. 12. 20.
[나혼자공부] 3주차 복습-1 벌써 3주차가 다되어간다. 시간 정말 빨리가네... 더 !! 더 열심히!! 오늘의 공부 내용내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...!예외와 에러의 차이점은 무엇인가? 내 답변: 에러는 시스템 수준에서 발생하는 문제이고 복구가 어려우며 프로그램이 중지 될 수 있습니다. OutOfMemory, StackOverflowError 같은 에러가 있으며 예외는 개발자가 catch라는 구문을 사용하여 사전에 처리하여 프로그램을 계속 실행할 수 있도록 할 수 있습니다. 예외에는 checked Exception과 unchecked Exception이 있습니다.Checked Exception과 Unchecked Exception의 주요.. 2024. 12. 19.
반응형