-
41일차 - 게시판 구현 & 문제백엔드(웹 서버, WAS)/Spring 2024. 3. 20. 16:55
servlet-context.xml 설정
resources 라는 요청이 오면 컨트롤러의 요청이 아니므로 webapp/resources 폴더를 봐라
<<< servlet-context.xml >>> <resources mapping="/resources/**" location="/resources/" />
mapper.xml 파일을 인식할 범위를 여러개 설정하기 위해 list 태그에 value 태그를 넣었다
<!-- <beans:property name="mapperLocations" value="classpath:kr/co/gudi/dao/*.xml"/> --> <!-- 여러개의 매퍼를 등록할 경우 beans:list 안에 값을 넣어주면 된다 --> <beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <beans:property name="dataSource" ref="datasource"/> <beans:property name="mapperLocations"> <beans:list> <beans:value>classpath:kr/co/gudi/member/dao/*.xml</beans:value> <beans:value>classpath:kr/co/gudi/board/dao/*.xml</beans:value> </beans:list> </beans:property> </beans:bean> <!-- 중간에 뭐가 들어갈지는 모르겠는데 끝에 dao 면 됨 --> <mybatis-spring:scan base-package="kr.co.gudi.**.dao"/>
0320_문제
Q1. 라이브러리와 프레임워크 차이는 무엇인가요?
M. 라이브러리는 누군가 구현한 기능들을 모아둔것을 말하고 프레임워크는 라이브러리를 포함하고 정해진 규칙, 틀을 따라서 코드를 작성해야한다
Q2. MVC 패턴에서 View, Controller, Model을 순서대로 설명해주세요.M. View 는 사용자는 보이는 화면, Controller 는 사용자에게 요청받고 해당 요청을 처리할 Model 에게 전달한다 Model 은 받은 요청을 처리한 후 반환하는 역할을 한다
Q3. Model1과 Model2의 차이는 무엇인가요?M. Model1 은 jsp 페이지에서 자바 로직과 HTML 함께 처리했었지만 Model2 는 분리하여 개발하는 차이점이 있다
Q4. 기존의 Connection Driver를 통해 DB를 처리하는 방법과 MyBatis를 통해 DB 처리를 하는 방법 중, 더 편리한 것과 그 이유를 설명해 주세요. (MyBatis 설명을 포함해 주세요)
A. MyBatis를 사용하면 SQL 쿼리와 Java 객체를 매핑하여 복잡한 JDBC 코드를 줄일 수 있습니다. MyBatis는 SQL 쿼리를 XML 또는 어노테이션을 통해 매핑하고, 객체 매핑을 통해 JDBC 코드 작성을 간소화합니다.
M.기존의 커넥션 드라이버는 소스코드에 직접 데이터베이스 연결 정보를 적어 커넥션 객체를 생성했다면 마이바티스는 서버에 context.xml 에 연결에 필요한 정보들을 적어놓고 파일의 내용을 객체화하여 연결해 직접
Q5. OX 퀴즈를 풀고 그 이유도 설명해 주세요.
"redirect:/list" 는 "list.jsp" 페이지로 이동하는 의미이다. ( O , X )
M. X, list.jsp 페이지로 이동하는 것이 아닌 컨트롤러에 list 요청을 보내는 의미이다
Q6. 한글 깨짐 방지 코드를 어느 설정 파일에 작성하였는지, 그리고 그 이유를 설명해 주세요.M. web.xml 에서 작성해야하고 web.xml 은 서버에서 가장 먼저 읽는 설정 파일로 요청과 응답을 주고 받을때 어떤 인코딩을 설정할지 결정할 수 있다
Q7. 스프링의 제어역행에 대해 설명해 주세요.M. 제어 역행(I.O.C) : 스프링에서 객체의 생성과 소멸을 결정하고 스프링이 사용자의 코드를 호출하는 것을 말합니다
Q8. MyBatis를 사용해 쿼리문을 작성할 때, parameterType과 resultType을 설정해야 하는 예시를 들어주세요.
A. MyBatis에서 parameterType은 SQL 쿼리에 전달되는 파라미터의 자료형을 설정하고, resultType은 쿼리 결과의 반환 형식을 설정합니다.M. 파라미터타입 또는 결과타입은 보통 사용자가 정의한 클래스 타입을 마이바티스에게 알려주기 위해 반환 형식을 설정했었다 예를 들어서 회원 정보 목록을 보여주기 위해 반환타입을 MemberDTO 클래스로 했었던 list 가 그 예시이다
Q9. MyBatis 사용 이후, dao를 인터페이스로 구현하였는데, 그 이유는 무엇인가요?
A. MyBatis를 사용하면 DAO(Data Access Object)를 인터페이스로 구현하는 것이 일반적입니다. 이는 MyBatis가 인터페이스와 XML 파일을 통해 SQL을 매핑하기 때문에 유연성이 높아지기 때문입니다.
M. BoardService(클라이언트)는 BoardDAO 의 인터페이스의 메소드만 호출하면 되므로 Mybatis가 인터페이스를 구현한 코드가 바뀌어도 클라이언트는 영향을 받지 않는다 이는 결합도를 낮추고 응집도는 높아지는 장점이 생긴다예시) BoardService 가 dao.list() 호출할 때 dao.list() 를 구현하는 코드가 바뀌어도 dao.list() 즉 클라이언트가 호출하는 코드는 전혀 바뀌지 않았다
- 응집도 : 모듈이 하나의 목적을 수행하는 기능들간의 연관성의 정도
- 결합도 : 하나의 모듈 수정을 위해서 다른 모듈의 변경을 요구하는 정도, 다른 모듈과의 의존성의 정도
Q10. HTML에서 location.href="./" 을 통해 이동한다면, 이동한 url 주소는 어디인지 적어주세요.M. location.href="./" 는 현재 페이지의 폴더(디렉토리)를 요청하는 의미이다 또 다른 예시로 ../ 은 현재 페이지의 상위 폴더의 경로를 의미한다
추가 설명) /main/detail 페이지에서 location.href="./" 를 실행하면 detail 페이지가 속한 폴더(디렉토리)는 /main '/' 이므로 /main/ 이 호출되게 되는것이다 파일만 경로를 가지지 않고 폴더(디렉토리)도 경로를 가진다
Q11. Connection Pool 에 대해 설명해 주세요.M. 커넥션 풀은 쓰레드 풀과 유사한 방식으로 작동되는데 데이터베이스와 연결시켜놓은 커넥션(쓰레드)을 미리 만들어서 풀에 저장한다. 풀은 커넥션을 사용하고 싶다는 요청이 들어오면 빌려주고 사용한 다음에 반납하기만 하면 개발자 입장에서는 편리하게 데이터베이스에 접근할 수 있게된다
부연 설명) 왜 미리 커넥션 객체를 만들어둘까?
실생활에서 예시를 들자면 피크 시간인 카페에서 아메리카노를 미리 10잔 받아둔 것과 주문이 들어온 후에 10잔을 만드는것은 주문(요청)과 서빙(응답) 사이의 기다리는 시간에서 큰 차이가 나기 때문이다 이제 예시에서 카페 알바생은 커넥션 풀이고 손님은 서버라고 생각하면 이해하기 쉽다
Q12. Java 와 DB 를 연결할 때 필요한 프로그래밍(과정)을 적어주세요.(자바의 영역) 0. 데이터베이스 연결에 필요한 정보 준비한다 0-1. 데이터베이스의 주소, 아이디, 비밀번호 등을 준비한다 1. 데이터베이스와 연결할 객체(커넥션)를 준비한다 1-1. 0. 에서 준비한 연결 정보를 객체에 입력하고 생성한다 2. 요청할 쿼리문을 작성하고 실행한다 2-1. 쿼리문의 실행결과는 executeQuery() 라면 ResultSet 형태로 행들을 반환한다 여기서 행들은 실제 DBeaver 에서 실행한 결과가 그대로 ResultSet 으로 담기는 상황을 떠올리면 좋다 2-2. 반대로 executeUpdate() 는 데이터베이스에서 변경, 삭제, 추가된 행수를 반환한다 (데이터베이스 영역) 3. 요청받은 쿼리문을 처리하고 2-1, 2-2 에 따라서 반환할 형태를 결정하고 커넥션 객체(서버)에게 반환한다 (자바의 영역) 4. 쿼리문의 실행 결과를 로직에 따라서 실행한다 5. 더이상 요청할 쿼리가 없다면 연결을 끊어 서버의 자원을 반납한다
Q13. DB 조작 시 쿼리문 실행을 위한 메서드와 반환타입을 설명해 주세요. (SELECT 쿼리문 실행 | 그 외 쿼리문 실행)
M. Q12 에서 설명했음
Q14. 스프링 사용 시 장점은 무엇인가요?
M. 스프링이 개발자가 매번 객체를 선언하고 언제 호출하고, 대입할지를 대신 제어하여 중복 코드를 줄이고 중요한 것에 집중하게 만든것이 큰 장점이라고 생각한다(제어 역전, 의존성 주)다른 장점으로는 다양한 라이브러리들과 간편하게 설치하고 제거할 수 있다
Q15. MyBatis를 이용하기 위해 pom.xml, servlet-context.xml, Mapper.xml 파일에서 어떤 설정을 해야 하는지 한줄로 간략히 설명해 주세요.
M.
-pom.xml
자바, 스프링, 라이브러리 버젼 관리와 설치 제거와 관련된 설정을 할 수 있다
-servlet-context.xml
-mapper.xml
Mybatis는 인터페이스에서 매핑된 메소드(*) 호출되면 mapper.xml 파일에서 매핑된 쿼리문을 읽어온 다음 데이터베이스에 전달하고 실행 결과를 반환한다
* 매핑 : A(인터페이스의 메소드)가 호출되면 B(메소드의 동일한 이름인 태그)를 읽어온다 과 같이 두 가지 객체나 요소 사이의 관계 설정한 과정을 의미한다
위의 설명은 짧게 요약한것이고 자바의 다형성을 이해해야지 내부 과정도 알 수 있다
package kr.co.gudi.dao; public interface MemberDAO { // join 메소드가 호출되면 마이바티스는 mapper.xml 에서 쿼리문을 읽어온다 int join(String id, String pw, String name, String age, String gender, String email); }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!-- 마이바티스는 메소드 이름과 동일한 태그를 찾고 안의 쿼리문을 데이터베이스에게 전달한다 --> <mapper namespace="kr.co.gudi.dao.MemberDAO"> <insert id="join" parameterType="map"> INSERT INTO member(id,pw,name,age,gender,email) VALUES(#{id},#{pw},#{name},#{age},#{gender},#{email}) </insert> </mapper>
-- 데이터베이스가 전달받은 쿼리문 INSERT INTO member(id,pw,name,age,gender,email) VALUES('admin','pass','김정원',24,'남','kjw@gamil.com')
0320_문제 Q1. 라이브러리와 프레임워크 차이는 무엇인가요? A. 라이브러리 : 프로그래밍에서 필요한 기능들이 모여있는 코드들의 집합 프레임워크 : 소프트웨어 개발 과정을 수월하게 하기 위해 개발자가 필요로 하는 표준 기능을 재사용 가능한 라이브러리 형태로 제공하는 도구나 환경 Q2. MVC 패턴에서 View, Controller, Model을 순서대로 설명해주세요. A. View : 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 Controller : 요청한 내용을 확인하여 해당 업무를 수행할 Model 에게 전달하는 역할 Model : Controller 에서 받은 요청을 처리 후 반환하는 역할 Q3. Model1과 Model2의 차이는 무엇인가요? A. 기존의 JSP 코드에서 HTMl과 JAVA를 분리하기 위해 고안해 낸 모델이며, Model1은 Java Data만을 분리하고 Java logic은 그대로 View에서 사용하는 점, (Java Data = Bean) Model2는 Java Code와 View를 완벽히 분리했다는 차이점이 있다. Q4. 기존의 Connection Driver를 통해 DB를 처리하는 방법과 MyBatis를 통해 DB 처리를 하는 방법 중, 더 편리한 것과 그 이유를 설명해 주세요. (MyBatis 설명을 포함해 주세요) A. 일반적으로 MyBatis를 사용하는 것이 더 편리하다. MyBatis란 Java에서 DBMS 작업을 쉽게 사용할 수 있도록 도와주는 프레임워크이며, DB 연동, 쿼리문 실행 객체 생성, 쿼리 실행, 결과값 반환, 자원 반납을 스스로 해주기 때문에 더욱 편리하다. Q5. OX 퀴즈를 풀고 그 이유도 설명해 주세요. "redirect:/list" 는 "list.jsp" 페이지로 이동하는 의미이다. ( O , X ) A. X Response 객체의 redirect 메서드는 해당 페이지로 이동이 아니라, 해당 요청을 받는 Controller 로 이동하라는 의미이다. Q6. 한글 깨짐 방지 코드를 어느 설정 파일에 작성하였는지, 그리고 그 이유를 설명해 주세요. A. web.xml 파일에 작성하며, 서버를 킬 때 가장 먼저 읽히는 파일이기 때문에 이 파일에서 한글 깨짐 방지 코드를 넣어준다. Q7. 스프링의 제어역행에 대해 설명해 주세요. A. 객체의 제어권을 프레임워크 컨테이너에게 넘겨 개발자가 아닌 스프링 컨테이너에서 객체의 생명주기를 컨트롤 하는 것을 의미한다. Q8. MyBatis를 사용해 쿼리문을 작성할 때, parameterType과 resultType을 설정해야 하는 예시를 들어주세요. A. parameterType : 들어온 parameter의 값이 한꺼번에 들어왔을 때, 각각의 값을 추출하기 위해 parameterType을 지정해 준다. resultType : 쿼리문이 SELECT라면 resultType을 지정해 줘야 하고, SELECT 문이 아니라면 요청 메서드의 필요에 따라 지정해 준다. Q9. MyBatis 사용 이후, dao를 인터페이스로 구현하였는데, 그 이유는 무엇인가요? A. SQL을 표현한 Mapper.xml 를 연결해주기 위하여. Q10. HTML에서 location.href="./" 을 통해 이동한다면, 이동한 url 주소는 어디인지 적어주세요. A. ./ 는 상대 경로로, localhost/main/으로 이동한다. Q11. Connection Pool 에 대해 설명해 주세요. A. 커넥션 풀(Connection Pool)은 데이터베이스나 다른 리소스에 대한 연결을 미리 생성하여 풀에 저장해 두고, 필요할 때마다 이 연결을 재사용하는 기술입니다. Q12. Java 와 DB 를 연결할 때 필요한 프로그래밍을 적어주세요. - java와 db 연결 프로그래밍 - db 쿼리 실행 프로그래밍 - db쿼리 반환 값 추출 프로그래밍 Q13. DB 조작 시 쿼리문 실행을 위한 메서드와 반환타입을 설명해 주세요. (SELECT 쿼리문 실행 | 그 외 쿼리문 실행) A. executeQurey():ResultSet executeUpdate():int 적용된 행의 개수 Q14. 스프링 사용 시 장점은 무엇인가요? A. 경량화로 프레임워크로 인한 개발 오버헤드가 적습니다. IoC 컨테이너가 객체 간 의존성 주입을 관리해줍니다. AOP로 핵심 로직과 시스템 서비스를 분리할 수 있습니다. Q15. MyBatis를 이용하기 위해 pom.xml, servlet-context.xml, Mapper.xml 파일에서 어떤 설정을 해야 하는지 한줄로 간략히 설명해 주세요. - pom.xml MyBatis 를 활용 하기 위해서는 다음의 라이브러리가 추가로 필요 하다. spring-jdbc.jar, mybatis.jar, mybatis-spring.jar - servlet-context.xml DB 접속 정보와 Mapper 설정, SqlSessionTemplate 사용을 위한 설정도 추가 해야 한다. - Mapper SQL 을 표현한 Mapper.xml 과 이를 연결 해 줄 Interface 를 구현 한다.
'백엔드(웹 서버, WAS) > Spring' 카테고리의 다른 글
43일차 - 파일 업로드 다운로드 (0) 2024.03.22 42일차 - 파일 게시판 (0) 2024.03.21 39,40일차 - Mybatis (0) 2024.03.19 38일차-회원 가입 시스템 구현 (0) 2024.03.15 37일차 - 자바에서 DB 연결 (0) 2024.03.14