*설치 프로그램
오라클
자바(7버전이상)
톰캣(7버전이상)
이클립스
SQL 디벨로퍼
이한솔 교육팀장님의 지도하의 교육이 진행되었습니다.
시작 전 몇가지 질문을 하셨습니다.
1. SI회사에 대해 아는지?
2. 스프링은 사용해봤는지?
스프링 프로젝트 과제 형식으로 교육이 진행됩니다. (밖에서 3-4년 정도 경험한 토대로.. 과제를 제작하셨다고 하심)
기본과제 + 추가 과제를 덧붙이는 형식입니다.
첫번째로, 프로젝트 환경구성
스프링 설정 관련 교육을 했습니다.
게시판을 보여주시면서 해당 파일을 공유해 주신다고 합니다.
용어에 대해 질문하신 후 설명해주셨습니다.
1. 스프링(Spring)에서 파라미터(Parameter)를 정의하는 이유는 다양합니다.
주요한 목적은 다음과 같습니다:
- 의존성 주입(Dependency Injection): 스프링은 의존성 주입을 통해 객체 간의 의존성을 관리합니다. 파라미터를 정의하여 스프링 컨테이너가 해당 파라미터에 적절한 빈(Bean)을 주입할 수 있도록 합니다. 이는 객체 간의 결합도를 낮추고 유연성과 테스트 용이성을 증가시킵니다.
- AOP(Aspect-Oriented Programming): 스프링은 AOP를 지원하여 핵심 비즈니스 로직에서 횡단 관심사(cross-cutting concerns)를 분리할 수 있습니다. 메서드의 파라미터를 정의하여 이를 활용해 특정 기능을 수행하는 공통 로직을 적용할 수 있습니다.
- 데이터 바인딩(Data Binding): 웹 애플리케이션에서는 HTTP 요청 파라미터를 메서드의 파라미터로 받아들여야 합니다. 이를 통해 클라이언트가 전달한 데이터를 자동으로 해당 메서드의 파라미터에 매핑할 수 있습니다.
- 유효성 검사(Validation): 스프링은 파라미터에 대한 유효성 검사를 지원합니다. 어노테이션을 사용하여 파라미터에 제약 조건을 정의하고, 스프링이 이를 검사하여 유효하지 않은 값이 들어오면 예외를 발생시킵니다.
- 인터셉팅(Interception): 스프링의 인터셉터(Interceptor)를 사용하여 HTTP 요청을 가로채고 처리할 수 있습니다. 이때 메서드의 파라미터를 활용하여 요청을 조작하거나 처리할 수 있습니다.
- 다국어 지원(Internationalization): 웹 애플리케이션에서는 클라이언트의 언어 설정에 따라 다국어 메시지를 제공해야 합니다. 스프링은 이를 위해 파라미터로 클라이언트의 로케일 정보를 받아 처리할 수 있습니다.
이러한 기능들을 활용하여 스프링 애플리케이션을 보다 유연하고 확장 가능하게 만들 수 있습니다.
2. URL 패턴이란?
URL 패턴은 웹 애플리케이션에서 특정한 URL을 매칭시키는데 사용되는 문자열 패턴입니다. 이는 클라이언트가 요청한 URL과 애플리케이션의 URL 매핑 규칙을 비교하여 요청을 처리하는 데 사용됩니다.
일반적으로 URL 패턴은 웹 애플리케이션의 경로와 서브 경로를 나타내는데 사용됩니다. 예를 들어, "/user"는 사용자 관련 기능을 가리킬 수 있고, "/products/*"는 "products"라는 경로 뒤에 오는 모든 하위 경로를 가리킬 수 있습니다.
URL 패턴은 다양한 방식으로 지정될 수 있습니다. 가장 흔한 방법은 경로 일치를 기반으로 하는 것입니다. 이 경우 와일드카드(wildcard) 문자("*")를 사용하여 여러 경로를 나타낼 수 있습니다.
하지만 어떤 경우에는 URL의 쿼리 문자열(query string)도 고려되어야 합니다. 이를 위해 URL 매핑 규칙에 쿼리 문자열을 포함시킬 수 있습니다.
또한, URL 패턴은 주로 웹 애플리케이션 프레임워크나 서버에서 사용됩니다. 이를 통해 요청이 특정한 핸들러(컨트롤러)로 라우팅되도록 할 수 있습니다.
만약 URL 패턴이 존재하지 않는다면, 클라이언트의 요청은 일치하는 핸들러가 없어 처리되지 않을 수 있습니다. 이는 404 오류(Not Found)를 발생시킬 수 있습니다. 따라서 올바른 URL 패턴을 정의하여 요청을 적절히 처리하는 것이 중요합니다.
스프링(Spring) 프로젝트의 URL 패턴을 확인하는 위치는 프로젝트의 구성에 따라 다를 수 있습니다. 일반적으로 스프링 프로젝트에서 URL 패턴은 다음 위치에서 확인할 수 있습니다:
- 컨트롤러(Controller) 클래스: 스프링 MVC 프로젝트에서 URL 패턴은 컨트롤러 클래스와 메서드에서 @RequestMapping, @GetMapping, @PostMapping 등의 애노테이션을 통해 지정됩니다. 따라서 컨트롤러 클래스를 살펴보면 해당 URL 패턴을 확인할 수 있습니다.
- 웹 구성 파일(Web Configuration): 스프링 프로젝트에서는 WebMvcConfigurer 인터페이스를 구현하여 웹 구성을 정의하는 경우가 많습니다. 이러한 설정 클래스에서 URL 패턴을 확인할 수 있습니다.
- 프로퍼티 파일(Properties file) 또는 YAML 파일: 스프링 부트(Spring Boot) 프로젝트에서는 application.properties 또는 application.yml 파일에 URL 패턴과 관련된 설정을 지정할 수 있습니다.
- URL 매핑 설정 파일: 스프링 프레임워크의 경우 web.xml과 같은 URL 매핑을 설정하는 XML 파일을 사용할 수 있습니다. 이 파일에서 URL 패턴을 확인할 수 있습니다.
- 애노테이션 기반 구성: 최신 스프링 버전에서는 XML 대신 자바 기반의 구성을 선호하는 추세입니다. 따라서 @Controller, @RequestMapping 등의 애노테이션을 사용하여 URL 패턴을 지정하는 방식을 확인할 수 있습니다.
이러한 위치들 중에서 적절한 곳을 선택하여 해당 스프링 프로젝트의 URL 패턴을 확인할 수 있습니다.
3. "Prefix"와 "Suffix"란?
"Prefix"와 "Suffix"는 일반적으로 문자열의 접두사와 접미사를 나타내며, 스프링(Spring) 프레임워크에서는 특히 ViewResolver에서 사용됩니다.
- Prefix(접두사):
- Prefix는 ViewResolver가 뷰(View)를 찾을 때 사용하는 경로의 시작 부분을 나타냅니다.
- 주로 웹 애플리케이션의 뷰가 위치하는 디렉토리를 가리킵니다.
- 예를 들어, "/WEB-INF/views/"와 같은 접두사를 설정하면 ViewResolver는 뷰를 "/WEB-INF/views/" 디렉토리 내에서 찾습니다.
- Suffix(접미사):
- Suffix는 ViewResolver가 뷰를 찾을 때 사용하는 파일 확장자를 나타냅니다.
- 주로 뷰 파일의 확장자를 나타내며, 특히 JSP, Thymeleaf, Freemarker 등의 템플릿 엔진을 사용할 때 유용합니다.
- 예를 들어, ".jsp", ".html"과 같은 접미사를 설정하면 ViewResolver는 뷰를 해당 확장자를 가진 파일로 식별합니다.
Prefix와 Suffix를 사용하는 이유는 다음과 같습니다:
- 경로 및 파일 확장자의 추상화: Prefix와 Suffix를 사용하면 ViewResolver가 실제 뷰 파일이 있는 위치와 파일 확장자에 대한 세부 사항을 알 필요가 없습니다. 이는 웹 애플리케이션의 구조를 변경하거나 뷰 엔진을 변경할 때 유용합니다.
- 간결성 및 편의성: Prefix와 Suffix를 설정함으로써 개발자는 각 뷰를 불러올 때마다 경로와 확장자를 반복해서 지정할 필요가 없으며, 코드가 더 간결해집니다.
사용 방법은 스프링의 설정 파일(예: application.properties, XML 설정 파일)에서 ViewResolver를 구성할 때 Prefix와 Suffix를 지정하는 것입니다. 이를 통해 ViewResolver는 지정된 Prefix와 Suffix를 사용하여 요청된 뷰를 찾습니다.
4. 스프링 컨텍스트(Spring Context)는
스프링 프레임워크의 핵심 부분 중 하나로, 애플리케이션의 구성 정보를 제공하고, 애플리케이션에서 객체들 간의 의존성을 관리합니다. 이를 통해 스프링은 객체의 생명주기를 관리하고, 의존성 주입(Dependency Injection)을 수행하여 애플리케이션의 유연성과 확장성을 향상시킵니다.
만약 스프링(Spring) 애플리케이션에서 모든 컨트롤러에서 공통으로 사용해야 하는 기능이 있다면, 다음과 같은 접근 방법을 고려할 수 있습니다:
- 어드바이스(Advice)와 인터셉터(Interceptor) 사용: 스프링에서는 컨트롤러 실행 전후에 코드를 실행하는 어드바이스와 인터셉터를 정의할 수 있습니다. 이를 활용하여 모든 컨트롤러에서 공통 기능을 수행할 수 있습니다. 예를 들어, 로깅, 보안 검사, 성능 측정 등의 기능을 어드바이스 또는 인터셉터로 구현할 수 있습니다.
- 애노테이션을 사용한 커스텀 어노테이션 정의: 공통 기능을 수행하는 메서드에 특정 애노테이션을 붙여 컨트롤러에서 호출되도록 할 수 있습니다. 이를 통해 공통 기능을 필요한 컨트롤러 메서드에만 적용할 수 있습니다.
- AOP(Aspect-Oriented Programming) 적용: AOP를 사용하여 관심사를 분리할 수 있습니다. 모든 컨트롤러에서 공통으로 수행되어야 하는 기능을 AOP를 통해 따로 모듈화하고, 해당 기능을 필요한 컨트롤러 메서드에 적용할 수 있습니다.
- 컨트롤러 부모 클래스 사용: 공통 로직을 처리하는 부모 컨트롤러 클래스를 만들고, 모든 컨트롤러가 이 클래스를 상속받도록 할 수 있습니다. 이를 통해 공통 로직을 중복 없이 사용할 수 있습니다.
- 필터(Filter) 사용: 모든 HTTP 요청에 대해 공통으로 처리해야 하는 로직이 있다면 서블릿 필터를 사용할 수 있습니다. 필터를 이용하면 컨트롤러 이전에 요청을 가로채어 처리할 수 있습니다.
이러한 방법들 중에서 프로젝트의 요구 사항과 구조에 가장 적합한 방법을 선택하여 모든 컨트롤러에서 공통으로 사용해야 하는 기능을 구현할 수 있습니다.
만약 스프링(Spring) 애플리케이션에서 모든 컨트롤러와 루트 컨텍스트에서 공통으로 사용해야 하는 기능이 있다면, 다음과 같은 접근 방법을 고려할 수 있습니다:
- 루트 컨텍스트에서 공통 기능 구현: 루트 컨텍스트에 공통 기능을 구현하고, 이를 서블릿 컨텍스트의 빈에서 사용합니다. 이 방법을 사용하면 모든 서블릿 컨텍스트에서 공통 기능을 사용할 수 있습니다.
- AOP(Aspect-Oriented Programming)를 루트 컨텍스트에서 적용: AOP를 사용하여 루트 컨텍스트에서 공통 기능을 구현하고, 이를 필요한 빈에 적용할 수 있습니다. 이 방법을 사용하면 다양한 빈에서 공통 기능을 쉽게 사용할 수 있습니다.
- 루트 컨텍스트의 빈을 서블릿 컨텍스트에서 참조: 루트 컨텍스트에 공통 기능을 구현한 빈을 정의하고, 서블릿 컨텍스트의 빈에서 이를 참조하여 사용할 수 있습니다. 이 방법을 사용하면 공통 기능을 서블릿 컨텍스트에서도 쉽게 사용할 수 있습니다.
루트 컨텍스트는 주로 서비스 계층, 데이터 액세스 계층 등의 비즈니스 로직에 관련된 빈을 정의하고, 서블릿 컨텍스트는 웹 관련 빈(컨트롤러, 뷰 리졸버 등)을 정의하는 데 사용됩니다. 따라서 공통 기능이 비즈니스 로직과 관련이 있다면 루트 컨텍스트에서 구현하는 것이 적합할 것입니다.
5. 로컬 데이터베이스에 맞는 설정을 하려면
스프링(Spring) 프레임워크의 설정 파일인 XML 파일에 데이터베이스 연결 정보를 지정해야 합니다. 일반적으로 다음과 같은 단계를 따라 설정할 수 있습니다.
- 데이터베이스 드라이버 및 연결 정보 확인: 로컬 환경에서 사용할 데이터베이스의 드라이버와 연결 정보를 확인합니다. 이 정보는 일반적으로 JDBC URL, 사용자 이름, 암호 등을 포함합니다.
- 스프링 XML 파일에서 DataSource 빈 설정: 스프링의 설정 파일인 XML 파일에서 데이터베이스 연결을 위한 DataSource 빈을 설정합니다. 이때 데이터베이스 드라이버 클래스, JDBC URL, 사용자 이름, 암호 등을 설정합니다.
오라클 데이터베이스를 사용하는 경우, 스프링(Spring) 프레임워크에서의 XML 설정 파일에서 데이터베이스 연결을 설정하는 방법은 다음과 같습니다.
- 오라클 JDBC 드라이버 추가: 먼저 프로젝트에 오라클 JDBC 드라이버를 추가해야 합니다. 이는 일반적으로 Maven이나 Gradle과 같은 의존성 관리 도구를 통해 수행됩니다. 오라클 JDBC 드라이버는 Oracle 공식 웹사이트에서 다운로드할 수 있습니다.
- XML 설정 파일에서 DataSource 빈 설정: 스프링의 XML 설정 파일에서 DataSource 빈을 설정합니다. 이때 오라클 JDBC 드라이버 클래스 이름과 JDBC URL을 설정해야 합니다.
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
<property name="user" value="사용자이름" />
<property name="password" value="암호" />
<property name="URL" value="jdbc:oracle:thin:@호스트명:포트번호:데이터베이스명" />
</bean>
기서 "oracle.jdbc.pool.OracleDataSource"는 오라클에서 제공하는 DataSource 구현체입니다. JDBC URL의 구성은 "jdbc:oracle:thin:@호스트명:포트번호:데이터베이스명" 형식입니다.
- JdbcTemplate 빈 설정(Optional): 필요하다면 JdbcTemplate 빈을 설정하여 데이터베이스 작업을 수행할 수 있습니다.
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
- 트랜잭션 관리 설정(Optional): 필요하다면 트랜잭션 관리를 위해 PlatformTransactionManager 빈을 설정합니다.
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
이러한 설정을 통해 스프링 애플리케이션에서 오라클 데이터베이스를 사용할 수 있습니다. 단, 실제 데이터베이스의 호스트명, 포트번호, 데이터베이스명, 사용자 이름, 암호 등을 해당 정보에 맞게 수정해야 합니다.
6. SQL 콘솔은
데이터베이스와 상호 작용하기 위해 사용되는 도구 중 하나입니다. SQL 쿼리를 실행하고 결과를 확인하며 데이터베이스를 관리하는 데 도움이 됩니다. 여러 이유로 SQL 결과값을 사용할 수 있습니다:
- 데이터 검색과 분석: SQL 쿼리를 실행하여 데이터베이스에서 원하는 정보를 검색할 수 있습니다. 이를 통해 데이터를 분석하고 필요한 정보를 추출할 수 있습니다.
- 데이터베이스 관리: SQL 쿼리를 사용하여 데이터베이스를 관리할 수 있습니다. 데이터베이스 테이블 생성, 수정, 삭제 등의 작업을 수행할 수 있습니다.
- 데이터 변경: SQL 쿼리를 사용하여 데이터베이스에 새로운 데이터를 추가하거나 기존 데이터를 수정, 삭제할 수 있습니다.
- 성능 최적화: SQL 결과값을 분석하여 데이터베이스의 성능을 최적화할 수 있습니다. 예를 들어, 인덱스를 추가하거나 쿼리를 수정하여 성능을 향상시킬 수 있습니다.
- 보고서 생성: SQL 결과값을 기반으로 보고서를 생성할 수 있습니다. 예를 들어, 특정 기간 동안의 판매 현황을 보고서로 생성하거나 데이터를 시각화하여 분석할 수 있습니다.
- 테스트: SQL 결과값을 사용하여 데이터베이스에 대한 테스트를 수행할 수 있습니다. 예를 들어, 데이터베이스 테이블이나 쿼리의 동작을 확인하는 데 사용할 수 있습니다.
7. classpath*와 classpath:**는
스프링 프레임워크에서 리소스를 찾을 때 사용되는 경로 패턴입니다.
- classpath*:
- classpath*는 클래스패스(classpath) 내의 모든 위치에서 리소스를 찾습니다.
- 클래스패스는 애플리케이션 실행에 필요한 클래스 및 리소스가 있는 위치를 나타냅니다.
- 따라서 classpath*를 사용하면 클래스패스 전체에서 리소스를 찾게 됩니다.
- classpath::
- classpath:는 클래스패스 루트(classpath root)에서 리소스를 찾습니다.
- 클래스패스 루트는 클래스패스의 최상위 디렉토리를 의미합니다.
- 따라서 classpath:를 사용하면 클래스패스의 최상위 디렉토리에서부터 리소스를 찾게 됩니다.
이러한 차이로 인해, classpath*는 클래스패스 루트 이외의 위치에 있는 리소스도 검색할 수 있지만, classpath:는 클래스패스 루트에서만 리소스를 검색합니다.
예를 들어, classpath*:config/*.xml는 클래스패스 전체에서 config 디렉토리 내의 모든 XML 파일을 찾지만, classpath:config/*.xml는 클래스패스 루트의 config 디렉토리에서만 XML 파일을 찾습니다.
주석을 필수로 작성하는 이유는
코드의 가독성을 높이고 유지보수를 용이하게 하기 위해서입니다. 주석은 코드를 이해하는 데 도움이 되는 정보를 제공하고, 코드의 의도나 특정 기능을 설명하여 개발자들이 코드를 더 잘 이해하고 활용할 수 있도록 돕습니다. 특히 파견이나 협업 프로젝트에서는 다른 개발자들도 코드를 파악해야 하기 때문에 주석은 더욱 중요합니다.
이클립스에서 주석을 검색하는 방법은 다음과 같습니다:
- 검색 창 사용:
- 이클립스의 상단 메뉴에서 "Search" 또는 "검색"을 선택합니다.
- "File Search" 또는 "파일 검색"을 선택합니다.
- 검색 대상을 "Workspace" 또는 "프로젝트"로 설정합니다.
- 검색할 단어나 구문을 입력합니다.
- "Containing text" 옵션에 주석을 찾고자 하는 내용을 입력합니다.
쿼리 검색 방법은
데이터베이스에서 원하는 정보를 찾는 방법입니다. 이를 통해 사용자가 필요한 데이터를 검색하고 가져올 수 있습니다. 네비게이션은 사용자가 웹 애플리케이션에서 다양한 페이지로 이동하는 방법을 의미합니다.
DAO(데이터 액세스 오브젝트) 임플리먼트는
데이터베이스와의 상호작용을 처리하는 데 사용됩니다. 이를 통해 데이터베이스에 접근하고 데이터를 조작할 수 있습니다.
Session은
사용자의 상태를 유지하고 관리하는 데 사용됩니다. 이를 통해 사용자의 로그인 상태나 세션 정보를 저장하고 관리할 수 있습니다.
레이아웃 프레임워크에는
스프링 타일즈와 JSP 인클루드가 있습니다. 이를 사용하여 웹 페이지의 레이아웃을 구성하고 재사용할 수 있습니다.
페이지네이션은
긴 목록을 여러 페이지로 분할하여 보여주는 기술입니다.
이를 통해 사용자가 데이터를 더 효율적으로 탐색할 수 있습니다.
컨트롤러는 사용자 요청을 처리하고 적절한 응답을 반환합니다.
이를 통해 웹 애플리케이션의 동작을 제어하고 사용자의 요청에 응답할 수 있습니다.
모델은 데이터를 나타내는 데 사용됩니다.
이를 통해 애플리케이션에서 사용되는 데이터를 정의하고 조작할 수 있습니다.
모델 앤 뷰는 데이터와 사용자에게 보여지는 화면을 연결하는 데 사용됩니다. 이를 통해 데이터와 화면을 연결하여 사용자에게 정보를 제공할 수 있습니다.
VO(Value Object)와 DTO(Data Transfer Object)는
데이터를 전달하는 데 사용됩니다. 이를 통해 데이터를 캡슐화하고 전송할 수 있습니다.
파라미터는 사용자가 입력한 값이나 요청에 포함된 정보를 받아옵니다.
이를 통해 사용자의 입력 값을 처리하고 애플리케이션에 전달할 수 있습니다.
Input은
사용자가 정보를 입력하는 데 사용됩니다. 이를 통해 사용자가 웹 페이지에서 데이터를 입력하고 전송할 수 있습니다.
리퀘스트(request)는 클라이언트로부터 서버에 전달되는 정보를 담고 있는 객체입니다.
스프링 프레임워크에서는 HTTP 요청을 처리하고 필요한 데이터를 추출하는 데 사용됩니다. 리퀘스트의 주요 특징과 역할에 대해 간결하게 설명해드릴게요.
- 역할: 클라이언트가 서버에게 전달하는 요청에 대한 정보를 담고 있으며, 이를 통해 서버는 요청을 처리하고 그에 따른 응답을 생성합니다.
- 요청 메서드: HTTP 메서드(GET, POST, PUT, DELETE 등)를 포함하여 요청의 종류를 지정합니다.
- 헤더(Headers): 요청의 메타데이터를 포함합니다. 예를 들어, 클라이언트의 IP 주소, 쿠키, 사용자 에이전트 등이 여기에 포함됩니다.
- 파라미터(Parameters): URL 쿼리 문자열이나 폼 데이터를 통해 전달되는 매개변수를 저장합니다.
- 바디(Body): 요청의 본문에 해당하는 부분으로, 주로 POST나 PUT 메서드를 통해 전달되는 데이터를 담습니다.
- 세션(Session): 클라이언트의 세션 정보를 관리하기 위한 메서드를 제공합니다.
- 쿠키(Cookie): 클라이언트와 서버 간의 상태 정보를 유지하기 위한 작은 데이터 조각입니다.
컨트롤러 메서드명은
사용하는 기능과 업무명, 그리고 표현하려는 데이터의 의미를 함께 넣어야 해요. 예를 들어, 회원 정보를 가져오는 메서드라면 getUserProfileData와 같은 형태입니다.
임플리먼트 파일을 열 때의 단축키는
컨트롤+쉬프트+알트+키보드입니다. 이 단축키를 사용하면 효율적으로 파일을 열고 작업할 수 있어요.
매퍼에서는
네임스페이스와 id를 사용하여 쿼리를 호출해요. 매퍼에서는 네임스페이스와 id를 사용하여 쿼리를 호출합니다. 여기서 네임스페이스는 해당 매퍼 파일의 유니크한 식별자이며, 주로 데이터베이스 테이블 또는 그룹을 나타냅니다. 각각의 쿼리는 해당 네임스페이스 내에서 고유한 id를 가지고 있어요. 이를 통해 원하는 쿼리를 정확하게 호출할 수 있습니다.
parameter map은 쿼리에 전달되는 파라미터들을 담는 객체를 말하는데,
이는 주로 MyBatis의 SQL 매핑 구문에서 사용됩니다.
매퍼 XML 파일에서 쿼리를 작성할 때, SQL 구문에서 사용할 파라미터는 보통 "parameterType"으로 정의됩니다. 이 때에는 Java 객체의 특정한 타입을 지정해야 합니다. 그리고 실제 SQL 구문 안에서 파라미터를 참조할 때는 파라미터 객체의 필드명을 사용합니다.
<!-- 매퍼에서의 SQL 구문 -->
<select id="selectUserById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
위의 예시에서 "parameterType"은 "int"로 지정되어 있어요. 이것은 SQL 쿼리에서 사용되는 파라미터의 타입이 정수임을 나타냅니다. 그리고 "#{id}"는 파라미터 맵에서 "id"라는 필드를 참조하는 것을 의미합니다.
따라서 MyBatis에서 "parameter map"을 사용하는 방법은 SQL 매퍼 XML 파일에서 파라미터 타입을 지정하고, SQL 구문에서 파라미터를 참조하는 것입니다. 이렇게 하면 MyBatis가 쿼리 실행 시 자동으로 파라미터를 매핑하여 실행할 수 있어요.
Result type을 사용할 수 있는 조건은
해당하는 데이터의 형식과 일치해야 해요. 데이터 형식이 일치하지 않으면 제대로 된 결과를 얻을 수 없을 수 있어요.
Between 쿼리문을 사용하여 페이지별로 데이터를 나누어 표시하는 방법은
주로 데이터베이스의 특정 테이블에서 일부 데이터를 추출하는데 사용됩니다. 페이지네이션을 구현하는 일반적인 방법 중 하나입니다. 보통은 LIMIT 또는 OFFSET을 사용하여 페이지네이션을 구현하지만, Between 절을 사용하여도 페이지네이션을 할 수 있습니다.
-- 페이지당 5개의 게시물을 보여주는 경우
SELECT *
FROM posts
WHERE post_id BETWEEN ((페이지 번호 - 1) * 5) + 1 AND (페이지 번호 * 5)
ORDER BY post_id;
위의 쿼리에서, 페이지 번호는 사용자가 요청한 페이지의 번호를 나타냅니다. 페이지당 5개의 데이터를 보여주기 때문에 Between 절을 사용하여 해당 페이지의 데이터를 추출합니다. Between 절은 시작값과 끝값을 지정하여 해당 범위 내의 데이터를 선택합니다.
이 쿼리를 사용하면 페이지별로 데이터를 나누어 표시할 수 있습니다. 페이지 번호에 따라 쿼리의 Between 절이 변화하므로 다른 페이지로 이동할 때마다 다른 데이터가 표시됩니다.
"Not like"를 사용할 때, "a_%"와 "a%"의 차이점은 문자열이 "a"로 시작하는지 여부에 있습니다.
- "a_%": 이것은 "a"로 시작하는 문자열을 찾는데 사용됩니다. 여기서 ""는 하나의 임의의 문자를 나타내는 와일드카드입니다. 따라서 "a"로 시작하는 모든 문자열이 선택됩니다. 예를 들어, "apple", "ants" 등이 선택됩니다.
- "a%": 이것은 "a"로 시작하는 모든 문자열을 찾는데 사용됩니다. "%"는 임의의 길이의 문자열을 나타내는 와일드카드이기 때문에 "a"로 시작하는 어떤 문자열이든 선택됩니다. "a_"와 달리, 문자열의 길이에 제한이 없습니다. 예를 들어, "apple", "ants", "amazing" 등이 선택됩니다.
이렇게 두 패턴을 사용하여 문자열을 필터링할 수 있습니다. 만약 문자열이 특정한 접두사로 시작하는지를 확인하고자 한다면 "a_%"를 사용하고, 시작하는 문자열의 길이에 제한이 없다면 "a%"를 사용하면 됩니다.
컨트롤+쉬프트+알트 키워드로 검색할 때 "*"을 사용하여 전체를 검색하는
예시는 다음과 같습니다:
예를 들어, Eclipse IDE에서는 이러한 기능을 제공합니다. 만약 프로젝트 전체에서 특정한 메서드명인 "getUserProfileData"를 찾고 싶다면, 다음과 같이 검색할 수 있습니다:
- Eclipse IDE에서 컨트롤+쉬프트+알트 키를 누르고, "F" 키를 눌러 검색 창을 엽니다.
- 검색 창에 "getUserProfileData"를 입력합니다.
- Enter 키를 누르거나 검색 버튼을 클릭하여 검색을 실행합니다.
이렇게 하면 프로젝트 전체에서 "getUserProfileData"라는 메서드명을 포함한 모든 파일을 검색할 수 있습니다. 이 방법을 사용하면 키워드를 포함한 모든 항목을 한 번에 찾을 수 있어요.
JSTL(Core JSP Standard Tag Library)의 c태그는 주로 서버측의 데이터를 화면에 표시하고 조작할 때 사용됩니다. 여러 가지 기능을 수행할 수 있는데, 주로 데이터를 출력하거나 조건문, 반복문을 사용하여 화면을 동적으로 제어하는 데 사용됩니다.
여기에는 JSTL의 c태그를 사용하는 간단한 예시가 있습니다:
- 변수 출력:
<c:out value="${user.name}" />
이것은 ${user.name}에서 값을 가져와서 출력합니다.
- 조건문:
<c:if test="${user.age ge 18}">
<!-- 성인 사용자 -->
</c:if>
여기서 ge는 "greater than or equal to"를 나타내며, 사용자의 나이가 18세 이상인 경우 내용을 실행합니다.
- 반복문:
<c:forEach items="${users}" var="user">
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
이것은 ${users}에 있는 각 사용자에 대해 테이블 행을 반복적으로 생성합니다.
- 변수 설정:
<c:set var="total" value="${num1 + num2}" />
${num1 + num2}의 값을 계산하여 total이라는 새로운 변수에 할당합니다.
이러한 c태그를 사용하여 JSTL을 통해 데이터를 동적으로 처리하고 화면에 출력할 수 있습니다. JSTL을 사용하면 Java 코드를 페이지에서 분리하여 더 간결하고 유지보수가 쉬운 JSP 페이지를 작성할 수 있습니다.
샘플 패키지 구조를 참고하여 업무명을 변경하려면,
해당 패키지의 소스 코드를 제공하는 사이트나 리포지토리를 찾아야 합니다.
일반적으로 오픈 소스 프로젝트의 경우 GitHub, GitLab, Bitbucket과 같은 코드 호스팅 플랫폼에서 소스 코드를 찾을 수 있습니다. 또한, 프로젝트의 공식 웹사이트나 다운로드 페이지에서도 소스 코드를 제공할 수 있습니다.
예를 들어, Spring Framework의 샘플 패키지를 찾고 싶다면 Spring 프로젝트의 GitHub 리포지토리에서 찾을 수 있습니다. 이 리포지토리에서는 다양한 샘플 및 예제 코드를 찾을 수 있습니다.
쿼리스트링은 경로에 원하는 이름을 지정할 수 있고,
패스 변수는 경로에 정의된 명이 있으면 VO로 받아올 수 있어요. 경로에 파라미터를 붙여서 서버에 전달하는 방법입니다.
조건절에서 원하는 데이터만 조회할 때는 주로 PK를 사용해요.
이를 통해 원하는 조건에 맞는 데이터만 조회할 수 있어요.
name과 id는 주로 form 태그에서 데이터를 전송할 때 사용돼요.
name은 서버로 데이터를 전송할 때 사용되고, id는 HTML 문서에서 고유한 식별자로 사용돼요.
serialize를 사용하면
form 태그에서 데이터를 쿼리스트링으로 만들어 전송할 수 있어요. 이를 통해 form 태그에 있는 데이터를 간편하게 전송할 수 있어요.
AJAX 호출은 비동기적으로 서버와 데이터를 주고받는 것을 의미해요.
이를 통해 페이지를 새로 고치지 않고도 서버와 데이터를 주고받을 수 있어요.
- 사용자 이름을 입력하고, 해당 이름을 서버로 전송하여 환영 메시지를 받아오는 예시:
<!DOCTYPE html>
<html>
<head>
<title>AJAX 호출 예제</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#submitBtn").click(function(){
var userName = $("#userName").val();
$.ajax({
url: "welcome.php", // 서버 요청을 처리하는 PHP 파일 경로
type: "POST", // HTTP 요청 방식
data: {name: userName}, // 전송할 데이터
success: function(response){
$("#welcomeMsg").html(response); // 서버로부터 받은 응답을 화면에 출력
}
});
});
});
</script>
</head>
<body>
<h2>환영 메시지</h2>
<input type="text" id="userName" placeholder="사용자 이름을 입력하세요">
<button id="submitBtn">전송</button>
<div id="welcomeMsg"></div>
</body>
</html>
- 위의 예시에서 서버 측에서는 "welcome.php" 파일로 요청을 전달하고, 해당 파일은 사용자의 이름을 받아서 환영 메시지를 생성하여 응답합니다.
이렇게 하면 사용자가 이름을 입력하고 전송 버튼을 클릭할 때, AJAX를 통해 서버로 요청이 전송되고, 서버는 요청을 처리하여 환영 메시지를 생성하여 응답합니다. 그리고 환영 메시지는 페이지에 동적으로 출력됩니다. 페이지 전체를 다시 로드할 필요 없이 서버와 통신하여 데이터를 주고받을 수 있습니다.
제이쿼리와 자바스크립트를 선택할 때는 해당 기능의 특징과 필요성을 고려해야 합니다.
각각의 기술에는 장단점이 있으며, 사용하려는 기능과 프로젝트의 요구 사항에 따라 적합한 도구를 선택해야 합니다.
제이쿼리(JQuery)의 특징:
- 간결한 문법: JQuery는 짧고 간결한 문법을 제공하여 복잡한 작업을 간편하게 처리할 수 있습니다.
- 크로스 브라우징: JQuery는 다양한 브라우저에서 일관된 동작을 보장하며, 크로스 브라우징 이슈를 해결하는 데 도움이 됩니다.
- 이벤트 처리: JQuery는 이벤트 처리를 쉽게 할 수 있는 다양한 메서드를 제공하여 웹 페이지의 상호 작용을 향상시킵니다.
- AJAX 지원: JQuery는 AJAX 요청을 간단하게 수행할 수 있는 메서드를 제공하여 비동기적으로 서버와 데이터를 주고받을 수 있습니다.
자바스크립트(JavaScript)의 특징:
- 웹 표준: JavaScript는 웹의 핵심 기술 중 하나로, 모든 웹 브라우저에서 지원됩니다.
- 다양한 라이브러리: JavaScript는 JQuery 외에도 다양한 라이브러리와 프레임워크가 있습니다. 예를 들어, React, Angular, Vue.js 등이 있습니다.
- ES6+의 추가 기능: 최신 버전의 JavaScript(ES6+)에는 클래스, 화살표 함수, 템플릿 리터럴 등의 새로운 기능이 포함되어 있어서 코드를 더 간결하고 효율적으로 작성할 수 있습니다.
- 자유도와 유연성: JavaScript는 다양한 작업을 수행할 수 있는 강력한 기능을 제공하며, 필요에 따라 직접 구현할 수 있습니다.
따라서 기능의 복잡성, 프로젝트의 규모, 개발자의 선호도 등을 고려하여 JQuery 또는 JavaScript를 선택해야 합니다. 간단한 웹 페이지 또는 프로토타입을 개발할 때는 JQuery가 유용할 수 있지만, 복잡한 웹 애플리케이션을 개발할 때는 JavaScript의 라이브러리나 프레임워크를 활용하는 것이 더 적합할 수 있습니다.
JSON 데이터는 자바스크립트에서 사용되는 데이터 형식 중 하나에요.
JSON(JavaScript Object Notation)은 자바스크립트에서 사용되는 데이터 교환 형식입니다. 아래는 JSON의 문법 예시입니다:
{
"name": "John",
"age": 30,
"city": "New York",
"isStudent": false,
"pets": ["dog", "cat"],
"address": {
"street": "123 Main St",
"zipCode": "10001"
}
}
이 예시에서:
- "name", "age", "city", "isStudent", "pets", "address"는 각각 속성(키)을 나타냅니다.
- "John", 30, "New York", false는 각 속성의 값입니다.
- "pets"는 배열을 값으로 가지고 있습니다.
- "address"는 객체를 값으로 가지고 있습니다.
- JSON은 중괄호 {}로 객체를, 대괄호 []로 배열을 정의합니다.
- 문자열은 큰따옴표로 감싸져 있어야 합니다.
- 숫자, 불리언, 문자열, 배열, 객체, null 등의 데이터 유형을 지원합니다.
JSON은 데이터를 간단하고 구조적으로 표현할 수 있으며, 다른 프로그래밍 언어와 플랫폼 간에 데이터를 교환하는 데 많이 사용됩니다.
이를 통해 서버와 클라이언트 간에 데이터를 주고받을 수 있어요.
다른 접근 방법으로 서버에 접근할 때는 파라미터를 다르게 설정하여 다양한 기능을 사용할 수 있습니다. 이를 통해 서버에서 원하는 동작을 수행할 수 있습니다. Spring 프레임워크에서는 다양한 어노테이션을 사용하여 파라미터를 설정할 수 있습니다. 예를 들어, Spring MVC에서의 컨트롤러 메서드에서 주요한 어노테이션은 다음과 같습니다:
- @RequestParam: HTTP 요청 파라미터를 메서드 파라미터에 바인딩합니다.
@RequestMapping("/user")
public String getUser(@RequestParam("id") int userId) {
// userId를 사용하여 사용자 정보를 가져오는 로직
return "userPage";
}
- @PathVariable: URL 경로의 일부를 메서드 파라미터에 바인딩합니다.
@RequestMapping("/user/{id}")
public String getUser(@PathVariable int id) {
// id를 사용하여 사용자 정보를 가져오는 로직
return "userPage";
}
- @RequestBody: HTTP 요청 본문을 자바 객체로 변환하여 메서드 파라미터에 바인딩합니다.
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ResponseEntity<String> createUser(@RequestBody User user) {
// user 객체를 사용하여 새로운 사용자를 생성하는 로직
return new ResponseEntity<>("User created successfully", HttpStatus.CREATED);
}
- @RequestHeader: HTTP 요청 헤더를 메서드 파라미터에 바인딩합니다.
@RequestMapping("/user-agent")
public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {
// User-Agent 헤더 정보를 사용하는 로직
return "userAgentPage";
}
JGXP는
제이쿼리에서 사용되는 특정 라이브러리나 플러그인을 의미할 수 있어요.
이를 통해 웹 페이지를 보다 동적으로 만들 수 있어요.
Success와 데이터 success의 차이점은
성공 여부와 함께 반환되는 데이터의 존재 여부에요.
Success는 요청이 성공했는지 여부를 반환하고, 데이터 success는 성공한 경우 해당하는 데이터를 반환해요.
Insert의 반환 타입은 성공한 행의 수를 반환하고,
delete와 update는 영향을 받은 행의 수를 반환해요. 이를 통해 데이터베이스 조작의 성공 여부를 확인할 수 있어요.
해쉬맵과 CommonUtil은 데이터를 다루는 방식에 차이가 있어요.
해쉬맵은 키와 값으로 데이터를 저장하고, CommonUtil은 유틸리티 클래스로 여러 메서드를 제공해요. 해쉬맵은 자료구조로 데이터를 저장하고 조회할 때 사용되고, CommonUtil은 다양한 기능을 제공하여 코드의 재사용성을 높일 수 있어요.
'(주)이트리즈시스템' 카테고리의 다른 글
이트리즈시스템 일경험 6~9일차 (0) | 2024.05.30 |
---|---|
이트리즈시스템 일경험 5일차 (0) | 2024.05.24 |
이트리즈시스템 일경험 4일차 (0) | 2024.05.23 |
이트리즈시스템 일경험 3일차 (0) | 2024.05.22 |
이트리즈시스템 일경험 2일차 (0) | 2024.05.21 |