Back-End

Back-End/MyBatis

MyBatis Mapper 방식

지금까지 DAO 클래스에서 직접 SqlSession을 호출하던 방식을 주로 사용했는데 이번에는 Mapper 인터페이스(Java)와 Mapper XML을 조합하는 방식을 사용해보려고 한다. 1. Mapper.java(인터페이스)자바 코드 내에서 SQL을 호출하기 위한 입구 역할을 한다.역할 : 비즈니스 로직(Service)에서 호출할 메서드를 정의한다.특징 : 구현체 없이 인터페이스만 정의한다.(MyBatis가 실행 시 동적으로 구현체를 생성한다.)메서드 이름은 XML id와 일치해야한다.@Mapper 어노테이션을 붙여 Spring 등에서 빈으로 인식하게 한다.@Mapperpublic interface UserMapper { List> selectUsers();} 2. Mapper.xml(SQL 설정 ..

Back-End/SpringBoot

Spring boot docs - 기본 패키지

✅ 1. "기본 패키지(default package)"란?아무 package선언이 없다면, Java는 그 클래스를 "기본 패키지"에 속한 것으로 간주즉, 그냥 src 폴더에 파일이 바로 들어있을 경우를 말함// 패키지 선언 없음public class MyClass { ...}✅ 2. 왜 기본 패키지를 쓰면 안 될까?Spring Boot는 애플리케이션을 실행할 때 다음과 같은 스캔 작업을 한다:@ComponentScan: 빈(bean)으로 등록할 클래스 찾기@EntityScan: JPA 엔티티 클래스 찾기@ConfigurationPropertiesScan: 프로퍼티 바인딩 대상 클래스 찾기이 스캔들은 지정된 패키지부터 하위 패키지를 모두 찾도록 동작하는데,**기본 패키지는 "패키지가 없다"**는 뜻이..

Back-End/SpringBoot

Spring boot docs - 빌드 시스템

✅ 1. 빌드 시스템이란?👉 프로젝트를 자동으로 컴파일, 테스트, 패키징, 실행하도록 도와주는 도구대표적인 빌드 시스템MavenXML 기반, 구조가 엄격함. 널리 사용됨GradleGroovy/Kotlin 기반, 유연하고 속도 빠름✅ 2. 종속성 관리란?👉 우리가 만든 코드 외에도 다른 라이브러리(예: DB 연결, 웹서버 등)를 함께 써야 함👉 이런 외부 라이브러리들을 자동으로 받아서 연결해주는 시스템Spring Boot가 도와주는 점Spring Boot는 필요한 라이브러리를 묶어서 자동으로 관리해줌라이브러리마다 버전 하나하나 다 쓰지 않아도 됨!예: spring-boot-starter-web를 추가하면, 웹 서버 관련 라이브러리들이 자동 포함됨✅ 3. 스타터(starter)란?👉 라이브러리 묶음(..

Back-End/SpringBoot

@Autowired 필드 주입 지양해야하는 이유

우선 이걸 공부하게 된 이유는 내가 맡고 있는 서비스의 소스가 아래처럼 되어있어서 찾아보다가 공부하게 되었다.@Resource(name= "electContractDAO")private ElectContractDAO electContractDAO; 이렇게 사용하면 우선 문제점들은 아래와 같다.1. 테스트 불가능(private 필드라 Mock 주입이 어렵다)2. 불변성 보장 불가(final 키워드 사용 불가 - @Resource, @Autowired 등과 같이 필드를 주입하는 어노테이션과 같이 못씀)3. 의존성 숨김(생성자만 봐서는 의존성 파악이 어렵다)4. 생성자가 호출된 후에 스프링이 따로 필드에 의존성을 주입해서 electContractDAO에 null 이슈가 있을 수 있다.5. 테스트 불가능(Moc..

Back-End/SpringBoot

SSR과 CSR

✅ 렌더링(Rendering)이란?렌더링이란 "코드(HTML, CSS, JS)를 브라우저가 해석해서 실제 사용자 눈에 보이는 '화면'으로 그려주는 과정"입니다. ✅ 1. SSR (Server Side Rendering: 서버사이드 렌더링)- HTML을 서버에서 렌더링해서 클라이언트(브라우저)에 전달(=완성본을 만들어 전달)- 완성된 HTML을 먼저 브라우저에 전송하고, 그 다음 JS 파일들을 다운로드에서 실행장점 초반 로딩 속도가 빠름(HTML이 미리 준비되어 있어 바로 표시 가능SEO(검색엔진최적화)에 유리단점사용자와 상호작용 시 페이지 새로고침 필요서버에 부하가 큼jsp, thymeleaf 등이 있다. ✅ 2. CSR (Client Side Rendering: 클라이언트사이드 렌더링)- HTML의 뼈..

Back-End/SpringBoot

JAVA 빌드 툴 - Maven과 Gradle

✅ Maven vs Gradle 비교구분MavenGradle 설정 방식XML (pom.xml)Groovy/Kotlin DSL (build.gradle)가독성길고 명확하지만 다소 장황간결하고 유연빌드 속도느린 편빠름(Incremental Build 지원)표준화매우 표준화되어 있음유연하지만, 표준 강제력은 낮음의존성 관리중앙 저장소(Maven Central)동일(Maven Central/JCenter 사용 가능)학습 곡선쉽고 직관적약간 더 높음확장성플러그인 중심코드처럼 자유롭게 확장 가능 ✅ 결론단순하고 표준화된 프로젝트 → Maven이 더 적합유연하고 성능 좋은 최신 빌드 시스템 → Gradle이 더 적합

Back-End/SpringBoot

기본 crud 만들기2

Q. UserController에서 userService 주입하는 이유? @atuowired를 안쓰는 이유? - 가장 큰 이유는 불변성 때문이다. 절대 바뀌지 않도록 보장하기 위해 생성자 주입을 사용.- userService가 절대 다른 객체로 바뀌지 않고 항상 같은 userService를 사용비교 항목@Autowired(필드 주입)생성자 주입불변성final 불가 → 런타임 변경 가능final 가능 → 불변 보장순환참조 감지런타임 시 늦게 발견빈 생성 시점에 바로 감지의존성 명확성클래스만 봐서는 어떤 의존성이 필요한지 숨겨짐생성자 파라미터로 명확하게 보임선택적 의존성가능 (@Autowired(required=false))선택적 주입엔 적합하지 않음코드 간결성가장 짧음생성자 필요(조금 더 코드 많음)Spr..

Back-End/SpringBoot

기본 crud 만들기

툴은 인텔리제이, 프레임워크는 스프링부트를 사용해서 기본 crud 게시판을 만들어 봤다. 우선 application.yml이란?-> Springboot는 보통 application.properties를 사용하지만 application.yml은 yaml 문법을 써서 더 계층적으로 보기 쉽게 관리할 수 있어서 현재 이 프로젝트에서는 application.yml을 사용했다. @RestController vs @Controller✅ @RestController역할 데이터(JSON, XML 등) 를 반환하는 컨트롤러주로 REST API 개발할 때 사용특징@Controller + @ResponseBody 를 합친 것메서드 리턴 값이 자동으로 JSON(또는 XML) 으로 변환됨뷰 이름을 반환하지 않음✅ @Contr..

개발하는 구름이
'Back-End' 카테고리의 글 목록