분류 전체보기 158

Map 등을 DI 할 수는 없을까?

Spring Boot에서 Map 등을 private 멤버변수를 통해 “DI”해서 사용할 수는 없는가? ⇒ 불가능하다. 일반 자바 컬렉션(List, Map) 등은 DI 대상이 아니다.Spring에서 @Autowired를 사용해서 의존성을 주입하려면 주입받을 객체는 Spring Bean으로 등록되어 있어야 하는데, Map/ List / Set / String / Integer 등은 단순한 자바 객체(POJO)이고, 직접적으로 스프링 컨테이너에 Bean으로 등록되어 있지 않기 때문에 @Autowired를 붙여 사용할 수 없다.Map을 꼭 DI해야할 일이 있다면 @Bean을 붙여 직접 등록하는 것이 낫다.하지만 보통 필요한 곳에서 직접 new HashMap()해서 사용하는 경우가 대부분이다. 특히 컨트롤러 ..

웹 개발 2025.04.25

XML 파일로 AOP 적용하기

[문제]1. around board S_ALL member S_ALL 수행시간을 비교하는 공통로그를 호출2. before, after 회원가입 전후로 로그 출력 before >> 메서드명을 출력 after >> 인자를 출력(누가 가입했는지 출력) 3. returning, throwing 로그인한 회원이 관리자라면, 관리자가 로그인했습니다. 라고 출력 만약 일반회원이 로그인했다면 예외 발생 그리고 그 예외가 발생했음을 알리는 공통로그를 출력 공통적인 기능 즉, 횡단 관심이므로 따로 Advice로 분리하는데 모든 문제가 다 로그를 출력하는 공통적인 역할을 하기 때문에 하나의 클래스로 작성했다.→ 코드의 응집도 향상. 1. LogAdvicepackage c..

웹 개발 2025.04.24

AOP

AOP(Aspect Oriented Programming)란? [AOP : 관점 지향 프로그래밍 (Aspect Oriented Programming)] AOP : 관심사를 분리하여 코드 중복 없이 처리하는 프로그래밍 기법.각 핵심 기능 메서드마다 중복되는 공통 작업들이 있다. 예를 들면 로깅, 보안, 권한 확인, 트랜잭션, 예외 처리 등. 이러한 공통 기능을 여러 클래스에 매번 넣으면중복 코드 증가 / 2. 유지보수 어려움 / 3. 핵심 로직이 흐려지기 때문에AOP는 이러한 공통 관심사들을 별도로 분리해서 한 곳에서 관리하도록 하는 것을 말한다. ※ AOP 미적용 시 : 코드 사이에 로그가 섞여있어서 핵심 로직을 흐리고 가독성이 좋지 않음public void 회원가입() { System.out...

웹 개발 2025.04.23

이메일 API 코드를 Spring Boot로 변환할 때 경고 처리

다음과 같은 코드가 있었는데 원래 60라인에 노란색 줄이 떴었다. 확인해보니 데이터가 확실히 Map 형식인지 확인할 수 없다는 경고. 그래서 @SuppressWarnings("unchecked")를 추가해줬는데 이때 response와 callback 2가지가 뜨길래 궁금해서 찾아봤다. [ @SuppressWarnings("unchecked") ]※ suppressWarnings : 경고가 제거되지만 검사 없이 강제 캐스팅 하는 방식이다. 응답 구조가 항상 같다면 사용해도 된다. => 해당 코드에서 profileMap.get(”response”)는 항상 Map 형태이므로 사용해도 된다. [ @SuppressWarnings("unchecked")에서 response와 callback 차이 ] callback..

웹 개발 2025.04.22

JSP/Servlet → Spring Boot 이관 중 배운 점

Spring Boot로 코드를 이관하면서 궁금하거나 헷갈리는 점들을 여럿 찾아봤는데 그걸 정리해서 올려보려고 한다. 1. Maven 프로젝트는 무엇이고, pom.xml은 뭐고, pom.xml에 json-simple 의존성은 왜 추가해야 하는가? Maven 프로젝트 : 자바에서 외부 라이브러리를 자동으로 관리해주는 도구. 예전 중간 프로젝트 때는 수동으로 .jar 파일을 다운로드 해서 /lib 폴더에 넣었는데 Maven은 이걸 자동으로 해준다. 즉, pom.xml에 com.googlecode.json-simple json-simple 1.1.1처럼 작성하면, Maven이 알아서 인터넷에서 json-sample을 받아서 프로젝트에 설치해준다. json-simple 의존성을 추가해야 하는 이유는JSON..

웹 개발 2025.04.21

web.xml, applicationContext.xml

1. XML이란?: 데이터 구조를 전달할 때 사용. 데이터를 담거나 프로그램 설정을 담고 있다. 2. 스프링에서 XML을 사용하는 이유스프링은 객체(Bean)을 관리하는데, 어떤 객체를 만들고 어떤 객체에 어떤 걸 주입할지(의존성) 등을 XML 파일로 설정할 수 있다.예시2. applicationContext.xml : 스프링이 사용할 객체 설정스프링 설정 파일(Bean, DI, 컴포넌트 스캔 등) (=Bean 객체)보통 src/main/resources 또는 WEB-INF 아래 위DispatcherServlet이 사용하는 스프링 전용 설정 파일. Bean 등록, 어노테이션 붙은 클래스 찾기Bean 등록하는 역할예시3. web.xml : 웹 전체의 시작점 설정 (예: DispatcherServlet)웹..

웹 개발 2025.04.20

DB 이관

중간 프로젝트 때는 MYSQL을 이용했지만 이번에는 ORACLE을 이용하려고 한다.그러기 위해서는 DBMS 이관이 필요하다. MYSQL → ORACLE 테이블 생성문을 수정하면서 가장 크게 고려한 점은 DBMS 간 호환성 및 이식성 !!DBMS를 저렴한 쪽으로 이관하는 경우가 많기 때문에 최대한 변경사항 없이 옮길 수 있도록 작성하는 것이 좋다. 그래서 최대한 SQL 표준 함수를 사용하고 ORACLE이나 MYSQL에서만 사용하는 AUTO_INCREMENT, NOW 등은 사용하지 않으려고 했다.1. VARHCAR2 대신 VARCHAR 사용 (이식성호환성 고려) 오라클에서는 VARCHAR2를 사용하도록 권장하고 있는 것 같지만 다른 DBMS에는 없어서 호환성이 좋지 않음.그래서 VARCHAR 사용 2. 관리..

웹 개발 2025.04.19

[Spring] 2일차

xml을 최소화하여 문제 해결해보기 [ ❗ 생각의 흐름 잡기 ] 태그가 존재한다.new를 했네?new를 했으니 기본생성자가 있어야 하네?삼성 TV, 엘지 TV 모두 기본 생성자를 만들어준다.public SamsungTV() { System.out.println("삼성TV 기본생성자 호출");} [ 삼성 리모콘과 엘지 리모콘 DI하기 ][ ❗ 생각의 흐름 잡기 ]파일 확인해보니 LG는 setter가 있네?applicationContext.xml에 을 통해 LG DI해주기 property는 setter로 의존성을 주입할 때 이용한다.property 태그는 LgTV 객체에 remote라는 setter가 있을거고, 그 setter에 lgRemote라는 이름의 Bean을 주입하겠다는 뜻.이때 ref="l..

웹 개발 2025.04.18

[Spring] 1일차

[스프링과 스프링부트]Spring현재 내가 다루고 있는 ‘그’ 스프링을 의미할 확률이 ↑2. Spring Boot모든 XML을 @(어노테이션)으로 바꾸기 위해서 나온 것web.xml, pom.xml, applicationContext.xml, mybatis.xml, jpa.xmlxxx.xml == 설정파일이라고 생각! ( == .properties)길고 복잡하고 가독성 떨어지는 xml 파일을 어노테이션을 통해 자바에서 한줄로 표현 (xml 설정들은 필연적으로 가독성이 떨어짐 >> @ JAVA에 설정을 직접할 수 있다! 가독성 ↑어노테이션을 왜달았는지 설명, 이 어노테이션이 뭐하는 애인지 설명주석을 잘 달자3.Spring 프레임워크가장 보편적인 스프링.웹 개발 프레임워크 == EJB(고대의 웹 개발 프레임..

웹 개발 2025.04.16

싱글톤 패턴이란?

싱글톤 패턴(Singleton Pattern) : 객체를 오직 하나만 생성하도록 보장하고, 이 객체에 전역적으로 접근할 수 있도록 만드는 디자인 패턴즉, 애플리케이션 전체에서 단 하나의 인스턴스만 존재하게 하고 싶을 때 사용하는 패턴이다. [사용하는 경우] 공통된 설정 정보를 전역에서 공유할 때DB 연결, 로그 처리, 설정 파일 로딩 등에 인스턴스를 여러 개 만들 필요가 없을 때메모리 절약, 성능 개선, 데이터 일관성을 유지해야 할 때 [장점]객체를 한 번만 생성하므로 메모리 절약동일 인스턴스를 사용해 데이터 일관성 유지생성 비용이 큰 경우에도 효율적으로 관리 가능[주의할 점]너무 많은 클래스가 싱글톤 객체에 의존하면 결합도가 높아져 유연성이 떨어짐테스트 어려움: 다른 객체처럼 쉽게 교체하거나 모킹(mo..

웹 개발 2025.04.15