728x90
728x90

자바 이클립스 editor does not contain a main type 오류가 뜰 경우 오류의 원인이 되는 경우를 정리해보았습니다.
분명히 코드는 되는 코드인데 이 오류가 뜬다면 체크해봐야할 것.

 


 

1.  자바 클래스 파일이 src폴더 밖에 있다.
2. 혹은 클래스 파일을 감싸는 패키지가 아예 없다. (default 패키지도 없을 때)
3. build path를 빼먹었을 때 (ojdbc6.jar) : 이클립스라기보다 STS3.0 등 스프링에서 열었을 때
4. 프로젝트를 다른 데에서 불러왔을 경우 
5. 메인 함수가 없거나 오타가 나 있다. --public static void main(String[] args)

1, 2의 경우 폴더를 만들어서 넣어두면 될 것이고 3번의 경우 마우스 우클릭으로 라이브러리에 추가해주면 된다.

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

로또복권은 45개 중에 6개의 숫자를 뽑아내서 응모해야합니다.
남궁성의 코드초보스터디 카페에서 참고, 자바로 실습해보았습니다. 

 

 


 

로또 번호 추첨 자바 소스코드

package lotto;

public class lotto {

	public static void main(String[] args) {
		int[] ball = new int[45];  //45개의 정수형 값을 ball을 저장하기 위한 배열 생성 
		for(int i=0; i<ball.length; i++) //배열에 1~45를 저장 
			ball[i] = i+1; // 0~44  +1 --> 1~45 
		
		int temp = 0; // 두 값을 바꾸는데 사용할 임시변수 
		int j = 0; //임의의 값을 얻어 저장할 변수  
	
		
		// 배열에 저장된 값이 잘섞이도록 충분히 큰 반복횟수 1000 지정
		// 배열의 첫번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞는다.
		for(int i=0; i<1000; i++) {
			j = (int)(Math.random()*45); //0~44에서 임의의 값
			//ball[0]과 ball[j]의 값을 서로 바꾼다
			temp = ball[0];
			ball[0] = ball[j];
			ball[j] = temp;
		
		}
		//배열 ball의 앞에서부터 5개 
		for (int i=0; i<=5; i++)
			System.out.print(ball[i]+" ");
	}

}

 

실행결과

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

스프링 버전

 

Spring Tool Suite™ 3 (STS 3) Download page

Use one of the links below to download an all-in-one distribution for your platform. Choose either a native installer or simple archive, they contain equivalent functionality

spring.io

 

톰캣 버전

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. You must verify the integrity of the downloaded files

tomcat.apache.org

https://hyunah030.tistory.com/2 (맥에서 톰캣 설치하기)

 

 

 

데이터베이스 구조

 

 

 

테이블, 계정 생성

...더보기
create user shop identified by 1234;
grant connect, dba, resource to shop;
--------------------------------------------------------
--  DDL for Table T_GOODS_DETAIL_IMAGE
--------------------------------------------------------

  CREATE TABLE "T_GOODS_DETAIL_IMAGE" 
   (	"IMAGE_ID" NUMBER(20,0) primary key, 
	"GOODS_ID" NUMBER(20,0), 
	"FILENAME" VARCHAR2(50 BYTE), 
	"REG_ID" VARCHAR2(20 BYTE), 
	"FILETYPE" VARCHAR2(40 BYTE), 
	"CREDATE" DATE DEFAULT sysdate
   ) ;
--------------------------------------------------------
--  DDL for Table T_SHOPPING_GOODS
--------------------------------------------------------

  CREATE TABLE "T_SHOPPING_GOODS" 
   (	"GOODS_ID" NUMBER(20,0) primary key, 
	"GOODS_SORT" VARCHAR2(50 BYTE), 
	"GOODS_TITLE" VARCHAR2(100 BYTE), 
	"GOODS_WRITER" VARCHAR2(50 BYTE), 
	"GOODS_PUBLISHER" VARCHAR2(50 BYTE), 
	"GOODS_PRICE" NUMBER(10,0), 
	"GOODS_SALES_PRICE" NUMBER(10,0), 
	"GOODS_POINT" NUMBER(10,0), 
	"GOODS_PUBLISHED_DATE" DATE, 
	"GOODS_TOTAL_PAGE" NUMBER(5,0), 
	"GOODS_ISBN" VARCHAR2(50 BYTE), 
	"GOODS_DELIVERY_PRICE" NUMBER(10,0), 
	"GOODS_DELIVERY_DATE" DATE, 
	"GOODS_STATUS" VARCHAR2(50 BYTE), 
	"GOODS_INTRO" VARCHAR2(2000 BYTE), 
	"GOODS_WRITER_INTRO" VARCHAR2(2000 BYTE), 
	"GOODS_PUBLISHER_COMMENT" VARCHAR2(2000 BYTE), 
	"GOODS_RECOMMENDATION" VARCHAR2(2000 BYTE), 
	"GOODS_CONTENTS_ORDER" CLOB, 
	"GOODS_CREDATE" DATE DEFAULT sysdate
   ) ;
--------------------------------------------------------
--  DDL for Table T_SHOPPING_MEMBER
--------------------------------------------------------

  CREATE TABLE "T_SHOPPING_MEMBER" 
   (	"MEMBER_ID" VARCHAR2(20 BYTE) primary key, 
	"MEMBER_PW" VARCHAR2(30 BYTE), 
	"MEMBER_NAME" VARCHAR2(50 BYTE), 
	"MEMBER_GENDER" VARCHAR2(10 BYTE), 
	"TEL1" VARCHAR2(20 BYTE), 
	"TEL2" VARCHAR2(20 BYTE), 
	"TEL3" VARCHAR2(20 BYTE), 
	"HP1" VARCHAR2(20 BYTE), 
	"HP2" VARCHAR2(20 BYTE), 
	"HP3" VARCHAR2(20 BYTE), 
	"SMSSTS_YN" VARCHAR2(20 BYTE), 
	"EMAIL1" VARCHAR2(20 BYTE), 
	"EMAIL2" VARCHAR2(20 BYTE), 
	"EMAILSTS_YN" VARCHAR2(20 BYTE), 
	"ZIPCODE" VARCHAR2(20 BYTE), 
	"ROADADDRESS" VARCHAR2(500 BYTE), 
	"JIBUNADDRESS" VARCHAR2(500 BYTE), 
	"NAMUJIADDRESS" VARCHAR2(500 BYTE), 
	"MEMBER_BIRTH_Y" VARCHAR2(20 BYTE), 
	"MEMBER_BIRTH_M" VARCHAR2(20 BYTE), 
	"MEMBER_BIRTH_D" VARCHAR2(20 BYTE), 
	"MEMBER_BIRTH_GN" VARCHAR2(20 BYTE), 
	"JOINDATE" DATE DEFAULT sysdate, 
	"DEL_YN" VARCHAR2(20 BYTE) DEFAULT 'N'
   ) ;
--------------------------------------------------------
--  DDL for Table T_SHOPPING_ORDER
--------------------------------------------------------

  CREATE TABLE "T_SHOPPING_ORDER" 
   (	"ORDER_SEQ_NUM" NUMBER(20,0) primary key, 
	"ORDER_ID" NUMBER(20,0), 
	"MEMBER_ID" VARCHAR2(20 BYTE), 
	"GOODS_ID" NUMBER(20,0), 
	"ORDERER_NAME" VARCHAR2(50 BYTE), 
	"GOODS_TITLE" VARCHAR2(100 BYTE), 
	"ORDER_GOODS_QTY" NUMBER(5,0), 
	"GOODS_SALES_PRICE" NUMBER(5,0), 
	"GOODS_FILENAME" VARCHAR2(60 BYTE), 
	"RECEIVER_NAME" VARCHAR2(50 BYTE), 
	"RECEIVER_HP1" VARCHAR2(20 BYTE), 
	"RECEIVER_HP2" VARCHAR2(20 BYTE), 
	"RECEIVER_HP3" VARCHAR2(20 BYTE), 
	"RECEIVER_TEL1" VARCHAR2(20 BYTE), 
	"RECEIVER_TEL2" VARCHAR2(20 BYTE), 
	"RECEIVER_TEL3" VARCHAR2(20 BYTE), 
	"DELIVERY_ADDRESS" VARCHAR2(500 BYTE), 
	"DELIVERY_METHOD" VARCHAR2(40 BYTE), 
	"DELIVERY_MESSAGE" VARCHAR2(300 BYTE), 
	"GIFT_WRAPPING" VARCHAR2(20 BYTE), 
	"PAY_METHOD" VARCHAR2(200 BYTE), 
	"CARD_COM_NAME" VARCHAR2(50 BYTE), 
	"CARD_PAY_MONTH" VARCHAR2(20 BYTE), 
	"PAY_ORDERER_HP_NUM" VARCHAR2(20 BYTE), 
	"DELIVERY_STATE" VARCHAR2(20 BYTE) DEFAULT 'delivery_prepared', 
	"PAY_ORDER_TIME" DATE DEFAULT sysdate, 
	"ORDERER_HP" VARCHAR2(50 BYTE)
   ) ;
--------------------------------------------------------
--  DDL for Table T_SHOPPING_CART
--------------------------------------------------------

  CREATE TABLE "T_SHOPPING_CART" 
   (	"CART_ID" NUMBER(10,0) primary key, 
	"GOODS_ID" NUMBER(20,0), 
	"MEMBER_ID" VARCHAR2(20 BYTE), 
	"DEL_YN" VARCHAR2(20 BYTE) DEFAULT 'N', 
	"CREDATE" DATE DEFAULT sysdate, 
	"CART_GOODS_QTY" NUMBER(4,0) DEFAULT 1
   ) ;
REM INSERTING into T_GOODS_DETAIL_IMAGE
SET DEFINE OFF;
Insert into T_GOODS_DETAIL_IMAGE (IMAGE_ID,GOODS_ID,FILENAME,REG_ID,FILETYPE,CREDATE) values (346,394,'test.jpg','admin','main_image',to_date('19/09/01','RR/MM/DD'));
drop sequence ORDER_SEQ_NUM;
drop sequence SEQ_GOODS_ID;
drop sequence SEQ_IMAGE_ID;
drop sequence SEQ_ORDER_ID;
--------------------------------------------------------
--  DDL for Sequence ORDER_SEQ_NUM
--------------------------------------------------------

   CREATE SEQUENCE  "ORDER_SEQ_NUM"  MINVALUE 0 MAXVALUE 10000000 INCREMENT BY 1 START WITH 400 CACHE 20 NOORDER  NOCYCLE ;
--------------------------------------------------------
--  DDL for Sequence SEQ_GOODS_ID
--------------------------------------------------------

   CREATE SEQUENCE  "SEQ_GOODS_ID"  MINVALUE 100 MAXVALUE 1000000 INCREMENT BY 1 START WITH 400 CACHE 20 ORDER  NOCYCLE ;
--------------------------------------------------------
--  DDL for Sequence SEQ_IMAGE_ID
--------------------------------------------------------

   CREATE SEQUENCE  "SEQ_IMAGE_ID"  MINVALUE 1 MAXVALUE 11111111 INCREMENT BY 1 START WITH 400 NOCACHE  NOORDER  NOCYCLE ;
--------------------------------------------------------
--  DDL for Sequence SEQ_ORDER_ID
--------------------------------------------------------

   CREATE SEQUENCE  "SEQ_ORDER_ID"  MINVALUE 0 MAXVALUE 10000000 INCREMENT BY 1 START WITH 400 NOCACHE  ORDER  NOCYCLE ;

 

 

 

 

jar파일 준비

- ojdbc6.jar

https://www.oracle.com/database/technologies/jdbcdriver-ucp-downloads.html

 

- lombok

https://projectlombok.org/download

 

 

 

프로젝트 환경설정

- Configure Build path 로 jar파일 연결

- 톰캣 서버 포트번호 이상 등 체크 (8080이 겹쳐서 8000으로 수정)

- xml 환경설정 : pom, app-servlet, root-context 설정

...더보기

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.lje</groupId>
	<artifactId>myshop</artifactId>
	<name>myshop</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.1.9.RELEASE</org.springframework-version>
		<org.aspectj-version>1.9.4</org.aspectj-version>
		<org.slf4j-version>1.7.25</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<!-- <dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency> -->
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		    <version>3.1.0</version>
		    <scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency> 
		
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-test</artifactId>
		    <version>5.1.9.RELEASE</version>
		    <scope>test</scope>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
		<dependency>
		    <groupId>org.bgee.log4jdbc-log4j2</groupId>
		    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
		    <version>1.16</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>5.1.9.RELEASE</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-dbcp2</artifactId>
		    <version>2.7.0</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
		    <groupId>org.projectlombok</groupId>
		    <artifactId>lombok</artifactId>
		    <version>1.18.8</version>
		    <scope>provided</scope>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.5.2</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>2.0.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-tx</artifactId>
		    <version>5.1.9.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-core -->
		<dependency>
		    <groupId>org.apache.tiles</groupId>
		    <artifactId>tiles-core</artifactId>
		    <version>3.0.8</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
		<dependency>
		    <groupId>org.apache.tiles</groupId>
		    <artifactId>tiles-jsp</artifactId>
		    <version>3.0.8</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet -->
		<dependency>
		    <groupId>org.apache.tiles</groupId>
		    <artifactId>tiles-servlet</artifactId>
		    <version>3.0.8</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.webjars.bower/jquery -->
		<dependency>
		    <groupId>org.webjars.bower</groupId>
		    <artifactId>jquery</artifactId>
		    <version>3.4.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
		<dependency>
		    <groupId>net.coobird</groupId>
		    <artifactId>thumbnailator</artifactId>
		    <version>0.4.8</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-aop</artifactId>
		    <version>5.1.9.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjrt</artifactId>
		    <version>1.9.4</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjweaver</artifactId>
		    <version>1.9.4</version>
		</dependency>
		
		  <!-- json -->
        <dependency>
		    <groupId>net.sf.json-lib</groupId>
		    <artifactId>json-lib</artifactId>
		    <version>2.4</version>
		    <classifier>jdk15</classifier>    
		</dependency>
		
		
		
		       
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

 

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />
	
	<beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
		<beans:property name="definitions">
			<beans:list>
				<beans:value>classpath:tiles/tiles*.xml</beans:value>
			</beans:list>
		</beans:property>
		<beans:property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory"/>
	</beans:bean>
	
	<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
		<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
		<beans:property name="order" value="1" />
	</beans:bean>
	

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
		 <beans:property name="order" value="2" />
	</beans:bean>
	
	<context:component-scan base-package="com.lje.myshop" />
	
	 <interceptors>
  		<interceptor>
		    <mapping path="/*/*.do"/> 
		    <mapping path="/*/*/*.do"/> 
		     <beans:bean class="com.lje.myshop.interceptor.ViewNameInterceptor" />
  		</interceptor>
	</interceptors> 
	
	
	<beans:bean id="multipartResoulver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
	</beans:bean>
	
	
</beans:beans>

 

 

root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
		<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
		<property name="url" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"/>
		<property name="username" value="shop"></property>
		<property name="password" value="1234"></property>
	</bean>
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:/models/modelConfig.xml"  />
	</bean>
	
	<mybatis-spring:scan base-package="com.lje.myshop.mapper"/>
	<context:component-scan base-package="com.lje.myshop"/>
</beans>

 

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets 
		and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>

	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml
			</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<multipart-config>
			<location>/Users/lee/Documents/java/spring/myshop/shop</location>
			<max-file-size>20971520</max-file-size>
			<max-request-size>41943040</max-request-size>
			<file-size-threshold>20971520</file-size-threshold>
		</multipart-config>
	</servlet>

	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

 

환경설정은 마쳤습니다. 이제 기능과 디자인을 구현해야겠죠.
다음 2편으로 이어집니다.

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

오라클 프로그램은 맥용이 없기에 가상머신 docker 도커를 사용해서 깔아주면 됩니다.
모르면 어렵지만, 해보면 쉽습니다. 여차저차 오류를 잡고 시스템에 연결했네요. 그럼 작업의 순서대로 나열해보겠습니다.

 


 

먼저 도커를 깔아줍니다.

맥 버전으로 받아주세요. 이제 이용하려면 회원가입이 필요합니다.
도커 역시 이때까지 맥에서 프로그램을 깔 때 그래왔듯 가상드라이버에서 설치하고 애플리케이션 폴더로 이동해주면 됩니다.
응용프로그램 폴더로 드래그앤 드롭, 느낌알지요?

 

 

Docker Desktop for Mac and Windows | Docker

Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.

www.docker.com




 

설치 후 상태바에서 도커 클릭 > 로그인

도커파일을 다운로드 받은 뒤 압축을 풀어 설치하고, 실행시켜준 후 계정 로그인을 진행합니다.
실행되고 있는 지는 상단바에 저 고래모양의 도커가 나타나는지를 확인하면 됩니다.

 

 

 

 

JDK, JRE 8.1 을 받아줍니다.

Jav SE버전에 한해 JDK와 JRE가 합해진 것을 다운받을 수 있다고 하네요. 꼭 둘 다 받아야됩니다.
전 10.0.2 버전을 다운로드했습니다.

 

Java SE Development Kit 8 - Downloads

Java SE Development Kit 8 Downloads Thank you for downloading this release of the Java™ Platform, Standard Edition Development Kit (JDK™). The JDK is a development environment for building applications, applets, and components using the Java programming la

www.oracle.com

 

 

 

 

도커 컨테이너 설치 및 실행

아래 명령어를 맥 터미널에서 실행시킵니다.
오라클 11g 이미지 중 하나인데 첫 번째 이미지가 안되는 분은 아래 다른 것을 사용해보세요.

docker pull wnameless/oracle-xe-11g
docker pull deepdiver/oracle-xe-11g

 

* 어떤 이미지를 사용했는지 확인하기

docker ps : 어떤 이미지를 사용했는지 확인 가능

 

 

 

 

설치된 컨테이너를 실행시켜줍니다.

docker run -d -p 8080:8080 -p 1521:1521 wnameless/oracle-xe-11g

 

-d : 백그라운드에서 컨테이너를 실행시키기 위한 옵션
-p : 호스트의 포트를 외부 노출시키는 옵션으로 localhost:1521을 오라클 도커 컨테이너의 포트 1521과 연결시킨다는 의미

 

 

 

뭔가 잘못했거나 설치중에 재부팅했거나 ...어쨌건 꼬여서 지워야할 때

docker rmi jaspeen/oracle-xe-11g

(제가 사용했던 이미지는 jaspeen이고 deepdiver나 wnameless를 이용하셨다면 그 자리에 그 이름)

 

 

터미널에서 SQL 실행

이 부분은 다른 블로그에도 잘 나와있는 부분입니다.
다시 도커에 로그인한 후 온라인에서 설치할 오라클버전의 이미지를 연결하여
설치를 진행, docker exec -it oracle11g sqlplus 로 sql을 실행시킨 후
기본 계정(system)의 user-name과 password를 지정하면 됩니다.

 

 

 

 

 

오라클 SQL Developer 설치 후 실행 (여기서도 오라클 계정 로그인이 필요합니다.)

https://www.oracle.com/kr/database/technologies/appdev/sql-developer.html

 

실행시킨 후 계정추가 + 버튼을 눌러 세팅을 진행해줍니다.
Name은 유저 자유이고 사용자이름과 비밀번호는 전단계에서 설정한 것을 적용하면 됩니다.
포트는 설치하면서 지정한 것을 사용하면 됩니다.

 

 

기본 연결 계정은 Username : system 입니다.
hostname은 localhost로 두고 테스트를 누릅니다.

 

 

 

세부정보를 입력해야하는데요. 포트번호를 까먹었다고요?
찾아본 블로그마다 포트번호 설정이 다 다르다고요? 괜찮습니다.
아까 사용하던 터미널로 포트번호를 물어보면 됩니다.

 

* SQL 포트를 까먹었을 때 (오라클 포트 번호 확인 및 변경하기)

 

select dbms_xdb.gethttpport from dual; 을 입력하면 포트번호를 알려주고,
begin~을 입력하여 변경 가능합니다.

 

 

확인했으면 다시 SQL디벨로퍼로 돌아가서 입력 후 테스트를 눌러 접속을 테스트합니다.
SID는 XE이지만 간~~~혹 11g인 경우도 있다고 하네요. 정보를 적고 테스트 후 성공이 뜨면 저장하고 접속하면 끝납니다.
그러나 간혹 여기서 또다른 오류를 만나게 됩니다.

 

 

 

* SQL Developer 오류 : Locale not recognized 

 

1) finder > SQLDeveloper.app 우클릭 > 패키지내용보기 클릭 후 아래 경로를 따라 가줍니다.

Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf


sqldeveloper.conf 파일을 텍스트편집기로 열어 코드 하단에 아래 코드를 추가해줍니다.

#Add new option
AddVMOption -Duser.language=ko
AddVMOption -Duser.country=KR

 

 

2) 그래도 안될 때 환경설정 확인

로케일설정에러입니다. 맥에서 한국어를 기본 언어로 사용할 경우 발생하는 문제입니다.
시스템 환경 설정 > 언어 및 지역 > 선호하는 언어: 를 기본언어, 지역을 영어 등으로 변경했다가 한국어로 되돌립니다.

 

 


 

오라클 system 계정으로 접속이 성공하면 간단한 실습을 해 봅시다.

오라클 새 계정 생성 및 권한주기

CREATE USER mvc
IDENTIFIED BY "1234";
GRANT CONNECT, DBA, RESOURCE TO mvc;

 

이제 드디어 DB연동을 할 수 있겠군요^^;;;

 


* 참고한 블로그

 

[Docker] 맥북에서 오라클 DB 사용하는 방법 (Docker + IntelliJ)

SQLD를 공부하기위해 Oracle을 사용하려다보니 OS X에서 Oracle을 정상적으로 사용할 수 없다는 사실을 알게됐습니다. OS X에서 오라클을 돌리는 방법이 매우 어렵고 주로 가상 머신을 사용한다고 인터넷에 나와..

inor.tistory.com

 

 

[Mac] oracle-xe-11g & SQL Developer 설치

STS(Spring Tool Suite)에 OracleDB를 연동해서 개발하기 위해 oracle-xe-11g와 SQL Developer를 설치해보겠습니다. 사용하고 있는 컴퓨터를 기준으로 작성했습니다 : ) [MacBook Pro, macOS High Sierra 10.13.6]..

clearstar0817.tistory.com

 

 

[Docker] 도커를 이용한 맥OS 오라클DB 설치 :: 마이자몽

맥OS 오라클 설치 현재 맥OS에서는 오라클DB 설치가 불가능하다. 그래서 많은 블로그나 책에서 대안으로 도커에다 오라클DB 서버를 올리는 방법을 안내한다. 맥OS에서 오라클을 설치하는데 잘 안된다는 문의가 들..

myjamong.tistory.com

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

이번 SQL 응용 테스트에서는 절차형 SQL , 응용 SQL 작성능력을 테스트하는 것으로 40분간 20문항의 문제를 풀면 됩니다.


자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션테스트 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 프로그래밍언어활용 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션 배포 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 데이터베이스 구현 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 응용소프트웨어기초기술활용 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: SQL 활용 문제와 답

 


 

1.  다음 중 사용자에게 부여한 객체 권한을 객체 소유자로부터 철회하기 위한 명령어는? (예: madang이라는 사용자가 book 테이블에 select 권한을 철회한다)

1) revoke
2) grant
3) drop role
4) delete authority

 

>> DB에 대한 관리자, 사용자 계정을 이해하고 데이터베이스 사용규칙에 따라 계정별 권한 설정 적용 가능 여부 확인

답 : 1


 

 

 

 

2. 아래 그림과 같은 뷰에 bookprice라는 속성을 추가시켜 뷰를 수정하기 위한 명령어는?

뷰  Vorders

ORDERID CUSTID NAME BOOKID BOOKNAME SALEPRICE ORDERDATE
1 1 박지성 1 축구의 역사 6000 14/07/01
6 1 박지성 2 축구아는 여자 12000 14/07/07
2 1 박지성 3 축구의 이해 21000 14/07/03
3 2 김연아 5 피겨 교본 8000 14/07/03

1) drop view
2) alter view
3) create view
4) create or replace view

 

>> 물리 데이터베이스 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부 검사가 가능한 지 확인한다.

답 : 2

 

 

 

 

 

3. 인덱스 ix_book 을 재생성하는 SQL문장을 작성하시오.

                                                                                         

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS (Data Base Management System)에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.

alter index ix_book rebuild;

 

 

 

 

4. 아래의 SQL 구문은 도서를 주문하지 않은 고객의 이름을 보이기 위한 MS-SQL 구문이다. 오라클에 사용하기 위해서는 EXCEPT 키워드를 바꿔야 한다. 다음 중 무엇으로 바꿔야 하나?

SELECT name
FROM Customer
EXCEPT
SELECT name
FROM Customer
WHERE custid IN (SELECT custid
			FROM Orders);

1) without
2) intersect
3) union
4) minus

 

>> 다양한 DBMS 의 응용 SQL을 이해하고, 각 시스템에 맞는 응용 SQL을 작성할 수 있는지 확인한다.

답 : 4

 

 

 

 

5. 아래 그림 3개의 릴레이션이 나타낸다. 여기에 속도가 겁나 빠르다고 알려진 UNIQUE INDEX를 걸어보려고 한다. 다음 중 UNIQUE INDEX를 걸기에 적합하지 않은 속성은?

 

1) O의 ORDERID
2) O의 CUSTID
3) CCUSTID
4) B BOOKID
5) 모두 괜찮아 보인다.

 

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS(Data Base Management System)에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.

답 : 2

 

 

 

 

6. 아래 그림은 릴레이션의 관계를 나타낸다. Orders 릴레이션 있는 CUSTID 와 BOOKID는 BOOK 릴레이션과 Customer 릴레이션의 기본키(primary key)를 참조(reference)하여 무결성을 보장하기 위해 만들어졌다. 이와 같은 키(key)를 무엇이라고 하는가?

1) 슈퍼키
2) 외래키
3) 후보키
4) 대체키

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS(Data Base Management System)에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다.

답 : 2

 

 

 

 

7. 아래 그림과 같이 3개의 테이블이 있다. 외부 조인을 사용하여 아래 질문의 답을 구하기 위한 SQL 문을 작성하시오.

 

도서를 구매하지 않은 고객을 포함하여 고객의 이름과 고객이 주문한 도서의 판매가격을 구하시오.

SQL 문 ->                                                                                          

 

>>  물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 처리하기 위한 DML을 작성할 수 있고 오브젝트를 활용하여 구하고자하는 레코드를 산출할 수 있는지 확인한다.

SELECT Customer.name, saleprice
FROM Customer LEFT OUTER JOIN
           Orders ON Customer.custid = Orders.custid;

 

 

 

8. 위의 테이블에 집합Group 연산과 집계연산을 활용하여, 다음의 질문에 답을 구하기 위한 SQL문을 작성하여라.

판매가격(saleprice)이 8000원 이상인 도서를 2권이상 구매한 고객의 고객아이디와 도서수량을 구하여라.

SQL 문 ->                                                                                          

 

>>  물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 처리하기 위한 DML을 작성할 수 있고 오브젝트를 활용하여 구하고자하는 레코드를 산출할 수 있는 지 확인한다.

SELECT custid, COUNT(*) AS 도서수량
FROM Orders
WHERE saleprice >= 8000
GROUP BY custid
HAVING COUNT(*) >=2;

 

 

 

9. 다음 인덱스 사용을 중지하는 SQL 문장은?
1) ALTER INDEX IDX_EMP_ENAME MONITORING USAGE;
2) ALTER INDEX IDX_EMP_ENAME NOMONITORING USAGE; 
3) ALTER INDEX IDX_EMP_ENAME VISIBLE;
4) ALTER INDEX IDX_EMP_ENAME INVISIBLE;

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. 답 : 4

 

 

 

 

10. 어떤 테이블이 있다. 속성 중에는 '사람이름'들이 있다. 가나다 순으로 정렬해서 보고 싶다. 그런데 sql 문장에서 정렬을 하기 위해서 쓰이는 order by 구문은 속도가 무지 느리다고 한다. 다행이도 '사람이름' 속성에 인덱스가 걸려있다고 한다. order by 구문을 쓰지않고 정렬하는 방법을 SQL 문장의 예시와 함께 간략히 설명을 기술하시오.

 

 

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. 답 : SELECT /*+ index (emp idx_emp_sal) */ ename FROM emp WHERE ename >'0';

 

 

 

11.  다음 중 PL/SQL 의 기본 구조에 포함되지 않는 구성부는?

1) 선언부 (Declare)
2) 정의부 (Define)
3) 실행부 (Begin)
4) 예외처리부 (Exception)

>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다. 답: 2

출처 ; 갓대희님 https://goddaehee.tistory.com/99

 

 

12. 아래의 그림을 간략하게 설명해보시오.

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. 답 : PL/SQL 블록의 구문이 입력되면, 처리 시 PL/SQL 엔진과 데이터베이스 엔진에서 각각 구분하여 처리한다.

 

 

 

13. 다음 중 SQL 구문 밖의 SQL 영역에서 사용하기 위한 변수를 선언한 것은 무엇인가?

1) VARIABLE v_temp NUMBER;
2) v_temp VARCHAR2(20);
3) TYPE r_type IS RECORD (...); v_temp r_type;
4) v_temp pl_emp%ROWTYPE;

>> [절차형 SQL 작성하기] 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. 답 : 1

 

 

 

 

14. 다음 중 PL/SQL 연산자와 그 설명으로 올바른 것은?

1) || -  논리값을 OR 하는 연산이다. 둘 중에 하나라도 참이면 결과값이 참이다.
2) ^ - 제곱 연산을 나타낸다. pow()메소드와 역할이 같다.
3) := - 대입, 배정, 할당 연산으로 우변 항의 값을 좌변 항에 넣는 역할을 한다.
4) <> - 논리 연산자로서 비교값이 NULL과 같지 않을 때 결과값이 참이다.

 

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다. PL/SQL 블록에서는 모든 SQL 연산자를 사용할 수 있으며, 연산자 우선순위는 다음과 같다. (아래 사진 참조)

: 3  (:=은 할당)

출처 : https://thebook.io/006696/part02/ch08/02/03/

 

 

 

 

15. 아래 PL/SQL 의 제어문에 대한 설명과 거리가 먼 것은?

DECLARE
	no1 NUMBER :=0;
BEGIN
	LOOP
		DBMS_OUTPUT.PUT_LINE(no1);
		no1 := no1 + 1;
		EXIT WHEN no1>5;
	END LOOP;
 END;
 /

 

1) Java언어의 do~while문과 동일한 특징을 가진다.
2) 반복 횟수를 모를 경우 사용된다.
3) 조건에 따른 분기(branch) 문으로서, 비슷한 성질의 for문이 있다.
4) no1>5 구문은 종료 조건을 나타낸다.

>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다. 답: 3

 

 

 

16. 미리 정의되어 있는 오라클 예외들 중 예외명 : DUP_VAL_ON_INDEX 는 어떤 경우에 발생되는가?

1) 문자를 숫자로 변환 시 실패했을 때
2) select 문이 두 건이상의 행을 리턴했을 때
3) 잘못된 커서 조작이 실행될 때
4) 유일 인덱스에 중복 값을 입력했을 경우

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는 지 확인한다.   : 4

 

 

 

 

17.  아래 그림에서 &id에 대한 설명으로 적합한 것은?

SET serveroutput ON; -- 결과값을 화면에 출력하기 위해서 사용합니다.
DECLARE
	v_empid employees.employee_id%TYPE;
	v_salary employees.salary%TYPE;
BEGIN
	SELECT empoyee_id, salary INTO v_empid, v_salary
	FROM employees
	WHERE employee_id = &id;

	DBMS_OUTPUT.PUT_LINE(v_empid ||' == '||v_salary);
END;
/

 

1) id 변수의 주소(address) 값을 의미한다.
2) 단지 사용자로부터 값을 입력받는 역할을 한다.
3) 비 PL/SQL 변수를 바인드한다.
4) 프로시저의 매개변수로서 중개역할을 한다.

>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다. 답: 2

 

 

 

 

18. 아래 그림과 같이 up_sal 이라는 프로시저를 작성하였다. 10라인에서 이 프로시저를 사용하기 위한 코드를 작성하고자 한다. 알맞은 것은?

CREATE OR REPLACE PROCEDURE up_sal
(vempid employees.employee_id%TYPE)
IS
	BEGIN
		UPDATE employees SET salary =5000
		WHERE employee_id=vempid;
	END;
/


SELECT employee_id, salary FROM employees
WHERE employee_id=206;

 

1)   PROCEDURE upsal(206)
2)  RUN upsal(206)
3)  upsal(206)
4)  EXEC upsal(206)



>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다. 답: 3

 

 

 

 

19.  다음과 같은 상황에서 필요한 기능은 무엇인가?

각종 센서 정보값(센서ID, 온도, 습도, 미세먼지, 현재시간)을 저장하는 <센서 정보> 테이블이 있다. 센서로부터 값이 수집될 때마다 이 테이블은 업데이트 쿼리를 실행한다. 값을 갱신한다는 뜻이다. 문제는 값이 갱신되어서 이력이 없다는 것이다. 그래서 <센서 정보 이력> 테이블을 만들어서, <센서 정보> 테이블에 업데이트 쿼리를 수행할 때마다, 자동으로 <센서 정보 이력> 테이블에 값을 입력시켜 누적 시키고자 한다.


1) trigger
2) sequence
3) package
4) function

 

>> 테이블, 인덱스, 제약조건을 이해하고 데이터베이스 설계에 따라 설치된 DBMS 에 적합한 오브젝트 생성 계획을 수립할 수 있는지 확인한다. 답: 1

 

 

 

 

20. PL/SQL 의 프로시저와 함수의  mode에 대한 설명으로 알맞지 않은 것은?

1) IN 모드 : 사용자 --> 프로시저, 함수로 전달 입력
2) OUT 모드 : 프로시저, 함수 -->  호출환경(SQL 클라이어트)로 출력
3) IN OUT 모드 : 사용자로부터 입력, 호출환경(SQL 클라이어트)로 출력 모두 가능
4) NOT IN OUT 모드 : 사용자 입력, 호출환경(SQL 클라이어트)로 출력 모두 불가, 프로시저, 함수 내부 출력 가능

>> 물리 데이터베이스의 설계에 따라 데이터베이스 오브젝트를 생성하기 위한 DDL을 작성할 수 있고 생성된 오브젝트에 대한 유효성 여부를 검사할 수 있는 지 확인한다. 답: 4

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

이번 SQL 활용 테스트에서는 SQL 문 작성능력을 테스트하는 것으로 50분간 13문항의 문제를 풀면 됩니다.


자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션테스트 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 프로그래밍언어활용 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션 배포 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 데이터베이스 구현 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 응용소프트웨어기초기술활용 문제와 답


 

1.  DML에 해당하는 3가지 명령어를 적으시오.

>> 단일행 함수와 WHERE 절을 이용한 DML 명령문 작성 테스트.

답 : INSERT, DELETE, UPDATE
DML : data manipulation language ( 조작어 ) :  select, insert, update, delete

DDL : data definition language ( 정의어 )  : create, alter, drop, rename, truncate - 데이터구조와 관련
DCL : data control language ( 제어어 ) : grant, revoke - db접근사용권한
TCL : transaction control language : commit, rollback, savepoint -  논리적 작업의 단위를 묶어서 DML에 의해 조작된 결과를작업단위(트랜젝션) 별로 제어하는 명령어

 

 

 

 

다음 그림과 같이 사원 (emp) 테이블과 부서 (dept) 테이블, 데이터를 참고하여 제시된 문제에 답하시오.

학과 (dept)

deptno dname
101 경영학과
102 컴퓨터공학과
103 영문학과

 

학생 (student)

studno name grade deptno profno
101 김기현 1 101 1001
102 김민영 2 101 1003
103 김정환 3 101 1001
104 김준태 4 101 1003
105 김지용 1 102 1002
106 김진 2 102 1002
107 김찬권 3 102 1002
108 김옥규 1 103 1004
109 박원영 2 103 1006
110 박의종 3 103 1004


교수 (professor)

profno name deptno position pay
1001 홍길동 101 정교수 450
1002 김연아 102 정교수 400
1003 박지성 101 부교수 350
1004 김태근 103 정교수 410
1005 서찬수 101 전임강사 250
1006 김수현 103 부교수 350
1007 정동진 102 전임강사
320
1008 임진영 103 전임강사 200

 

 

2. dept (학과) 테이블을 다음과 같이 생성하기 위한 쿼리를 작성하라.
deptno 고정길이 문자 3으로 지정하고 기본 키로 지정, dname 가변길이 문자 20으로 지정하고 not null 제약조건을 설정한다.

DDL 명령문을 작성 가능

create table dept (
	deptno char(3),
	dname varchar(20) not null,
	constraint "PK_DEPT" primary key (deptno)
);

 

 

 

 

3. dept (학과) 테이블에 데이터를 입력하는 쿼리를 작성하시오. (단 1개의 레코드 입력만 서술)

DML 명령문을 작성 가능

insert into dept(deptno, dname)
values ('123', 'hong');

 

 

 

 

4. student (학생) 테이블과 dept(학과) 테이블을 deptno를 참조하여 EQUI JOIN(등가 조인) 하는 쿼리를 작성하라.
(단 select 절의 칼럼은 편의상 * 으로 표시한다.)

조인을 이용하여 데이터를 조회하는 DML 작성 여부

select * 
from student s, dept d
where s.deptno = d.deptno;

 

 

 

5.  student (학생) 테이블의 deptno는 현재 dept (학과) 테이블의 deptno 를 참조하고 있다. student(학생) 테이블의 studno가 110인 사람의 deptno를 104로 수정을 해야한다면 수정을 할 수 없다. 그 이유는 무엇이며 꼭 수정해야한다면 어떻게 해야할 지 서술하시오. (쿼리 작성이 아닌 해결방법만 서술하시오)

조인을 이용하여 데이터를 조회하는 DML 작성 여부

>> 학생테이블에는 deptno 중 104가 없기 때문에 참조할 수 없다. 꼭 104로 수정하려면 학과테이블에 deptno 가 104인 데이터가 추가되어야 한다.

 

 

 

 

6. professor(교수) 테이블에서 그룹함수를 사용하여 deptno별로 pay의 총합을 출력하는 쿼리를 작성하시오 (출력되는 칼럼은 deptno와 pay만 있으면 됨)

행을 조회하는 DML명령문 작성 여부

select deptno, sum(pay)
from professor
group by deptno;

 

 

 

 

7. student 테이블에서 grade별로 학생수에 대한 소계값을 구해야 한다면 어떤 함수를 사용해야 하는가?

행을 조회하는 DML명령문 작성 여부

>> rollup 이나 cube
- rollup :  group by 절에 의해 그룹지어진 집합결과에 대해서 상세한 정보를 반환하는 기능을 수행
select절에서 선택된 데이터와 그 데이터의 총계를 구할 수 있다
- cube :  결합 가능한 모든 값에 대하여 다차원 집계를 생성. 내부적으로는 Grouping Columns의 순서를 바꿔어서 또 한 번의 Query를 추가 수행해야 한다. 뿐만 아니라 Grand Total은 양쪽의 Query 에서 모두 생성이 되므로 한 번의 Query에서는 제거 되어야만 하므로 ROLLUP에 비해 시스템의 연산 대상이 많다.

 

 

 

8. 그룹함수는 where 절에서 비교할 수 없다. 그렇다면 그룹함수는 어떻게 조건을 비교해야 하는가?

행을 조회하는 DML명령문 작성 여부
>> having 사용

 

 

 

9. 괄호 안에 들어갈 명령문을 완성하시오.

DML이 일어나면 트랜잭션의 완료와 취소를 위한 DCL명령문이 필요하다. 데이터의 변경사항을 데이터베이스에 영구히 기록시키는 것을 (           )이라고 하며, 원래 상태로 돌리는 것을 (          )이라고 한다.

 

업무단위인 트랜젝션의 완료와 취소를 위한 DCL명령문의 작성 여부
>> commit, rollback

 

 

 

10. 테이블 조회시에 하드디스크나 데이터버퍼캐시에 접근하기 이전에 제약조건이나, 해당테이블의 존재 유무 등을 파악하기 위해 참고하는 것을 데이터 딕셔너리라고 한다. dept(학생) 테이블의 데이터 딕셔너리를 조회하는 쿼리를 작성하시오. (단 select절의 칼럼은 편의상 * 으로 표시한다.)

데이터 사전을 조회하는 명령문을 작성할 수 있어야 한다.

select *
from user_tables
where table_name = 'dept';

 

 

 

11. student (학생) 테이블에서 grade별로 학생수에 대한 소계값을 구하기 위해서는 복수행함수를 사용하면 쉽게 구할 수 있다. 복수행 함수를 사용하지 않고 소계값을 구하기 위해서는 여러개의 select문을 합치는 UNION을 사용하면 된다. UNION과 UNION ALL에 대한 차이는 무엇인가?

집합연산자에 대한 이해가 있어야 한다.

>> select절을 합치는 키워드이며 UNION은 중복된 값을 배제하고 UNION ALL은 모든 결과를 합친다.
(UNION과 UNION ALL은 두 개의 select절을 합친다는 면에서는 동일하나, UNION은 중복된 값을 배제하고 Order by를 해준다는 면에서  UNION ALL 과 차이가 있다. 두 개의 집합을 합치는 것이 목적이라면 UNION을 사용하는 것보다 UNION ALL을 사용하는 것이 바람직하다. 그 이유는 중복된 값을 배제한다던지 정렬을 해주는 추가 연산이 들어가지 않기 때문이다.)

 

 

 

12. 학생 전화번호의 지역번호가 '02'이면 '서울', '051'이면 '부산', '052'이면 '울산', '053'이면 '대구', 나머지는 '기타'로 출력하여라.

name userid tel
전인하 jun123 051) 781-2158
이동운 Dals 055) 426-1752
박미경 anse1414 055) 261-8947
김영균 mandu 051) 824-9637
박동진 Ping2 051) 742-6384
김진영 simply 055) 419-6328
지은경 Gomo00 055) 418-9627
오유석 yousuk 051) 724-9618
하나리 hanal 055) 296-3784

 

CASE WHEN THEN 또는 DECODE를 이용한 DML을 작성할 수 있어야 한다

select name, tel,
	case(substr(tel,1,instr(tel,')')-1)) when '02' then '서울'
		when '031' then '경기'
		when '051' then '부산'
		when '052' then '울산'
		when '055' then '경남'
		else '기타'
		from student
		where deptno=101;
--decode
select name, tel,
	decode((substr(tel,1,instr(tel,')'-1)), '02', '서울',
		'031','경기',
		'051','부산'
		'052','울산'
		'055','경남','기타') "지역명"
from student
where deptno=101;

 

 

 

 

13. 사용자 아이디에서 문자열의 길이가 7  이상인 학생의 이름과 사용자 아이디를 출력하여라.

where절과 단일행 함수를 활용한 DML명령문을 작성할 수 있어야 한다.

select name, userid
from student
where length(userid)>=7;

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

이번 응용소프트웨어기초기술활용 테스트에서는 운영체제 기초 활용,
데이터베이스 기초 활용, 네트워크 기초 활용,
기본 개발환경 구축을 테스트하는 것으로 40분간 20문항의 문제를 풀면 됩니다. 


자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션테스트 문제

자바기반 앱개발 & 웹서비스 구축개발 :: 프로그래밍언어활용 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션 배포 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 데이터베이스 구현 문제


 

 

1. 다음 보기 중 운영체제(Operating System)로 볼 수 없는 것은?      3

1) Unix, Linux
2) Android OS, Tizen
3) JVM, .Net Framework
4) Windows, DOS
5) iOS, MacOs

프레임워크 : 소프트웨어 어플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경

 

 

 

2. 다음 중 운영체제가 관리하는 대상으로 보기 어려운 것은?      5

1) 메모리와 같은 기억장치
2) 마우스, 키보드 등의 입력장치
3) 모니터와 같이 연결된 출력장치
4) SSD를 포함한 하드디스크 등의 저장장치
5) 네트워크로 구성된 원격지 컴퓨터와 같은 서버장치

운영체제가 관리하는 대상 : 프로세스 관리, 기억 장치 관리, 입출력 장치 관리, 정보 관리

 

 

 

 

3. 운영체제에서 가장 핵심적인 부분으로 시스템을 구성하는 중요한 자원들(메모리, 파일, 주변 장치)을 관리하며 시간관리, 프로세스 관리, CPU 스케줄링 등의 컴퓨터 운영의 핵심사항을 처리하는 것은?       1

1) 커널 (kernel)
2) 파일시스템 (file system)
3) 인터페이스 (Interface)
4) 데이터관리 (Data control)
5) 쉘 (shell)

커널 : 컴퓨터 운영체계의 가장 중요한 핵심으로써 운영체계의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공한다.
커널에는 종료된 입출력연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 스케줄러, 그리고 스케줄이 끝나면 실제로 각 프로세스들에게 컴퓨터의 사용권을 부여하는 수퍼바이저(supervisor) 등이 포함된다. 또한 메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 메모리관리자를 가지고 있다. 커널의 서비스는 운영체계의 다른 부분이나, 흔히 시스템 호출이라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다.


셸(shell) : 셸은 운영체계의 가장 바깥부분에 위치하고 있으면서, 사용자 명령어에 대한 처리를 담당. 커널과 대비.

인터페이스 : 사물과 사물 사이 또는 사물과 인간 사이의 경계에서, 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜

 

 

 

 

4. 리눅스 기본 필수 명령어 중, 해당 디렉터리에 있는 파일의 목록(list)을 나열하는 것은?    2

1) dir
2) ls
3) cd
4) pwd
5) cat

CLI (Command Line Interface)환경에서 운영체제의 기본명령어 확인하기.

 

 

 

5. 다음 중 GUI (Graphics User Interface)가 아닌 CLI (Command Line Interface)에 해당하는 것은?    1

1) Windows10의 cmd
2) Mac의 시에라 finder
3) Android의 위젯
4) 우분투 리눅스의 X윈도우
5) 애플워치의 컴플리케이션

애플워치의 컴플리케이션 : 시계 내에 시간(시, 분, 초)과 날짜(요일, 날짜) 외에 다양한 기능이 더해진 시계

 

 

 

6. ER 표기법에 대한 설명 중 옳지 않은 것은?   3

 

관계형 데이터베이스의 설계를 위한 ER 다이어그램을 작성하는 방법의 이해 확인 >> 이동

 

데이터 모델링

데이터 모델링 데이터 모델링이란 현실 세계의 업무적인 프로세스를 물리적으로 데이터베이스화 하기 위한 과정이다. 개념적 모델링 개념적 모델링은 요구사항을 수집하고 분석한 결과를 토대로 업무의 핵심적인..

psun.tistory.com

 

 

 

 

 

7. 다음의 내용을 모두 포함하는 데이터베이스를 ER-다이어그램으로 설계하시오. IE표기법으로 나타내시오.

1) 가족과 직원이라는 개체가 있습니다.
2) 직원에는 직원번호, 이름, 직책이라는 속성들이 있으며 직원번호로 직원을 식별 가능합니다.
3) 직원은 부양할 가족이 있을 수 있습니다.
4) 가족은 이름과 관계의 정보를 가지고 이름이 식별자(부분키) 입니다.


 

해설>> 

 

 

 

8. 아래는 java 환경에서 jdbc 드라이버를 이용하여 데이터베이스를 연동하는 예이다. 다음 설명 중 틀린 것은?       1

//booklist.java

import java.sql.Connection;

public class booklist{
	Connection con;

	public booklist(){
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		/* 11g express edition은 orcl 대신 XE를 입력한다. */
		String userid="madang";
		String pwd = "madang";

		try { /* 드라이버를 찾는 과정 */
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("드라이버 로드 성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try { /* 데이터베이스를 연결하는 과정 */
			System.out.println("데이터베이스 연결 준비 ...");
			con = DriverManager.getConenction(url, userid, pwd);
			System.out.println("데이터베이스 연결 성공");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

 

1) DB연결 문자열의 localhost는 웹서버 ip를 의미한다.
2) Class.forName() 메소드는 jdbc.jar의 클래스를 임포트시킨다.
3) DB연결 문자열의 마지막 요소는, 예를 들어 orcl 혹은 xe는 db의 sid이다.
4) DB연결 메소드의 파라미터는 DB연결문자열, 오라클 사용자, 비밀번호 이렇게 총 3가지이다.
5) ClassNotFoundException은 jar파일 패키지 안에 클래스가 없을 시 발생하는 예외이다.

 

localhost는 컴퓨터 네트워크에서 사용하는 루프백 호스트명으로, 자신의 컴퓨터를 의미한다. IPv4에서의 IP 주소는 127.0.0.1이며, IPv6에서는::1로 변환된다. 로컬 컴퓨터를 원격 컴퓨터인 것처럼 통신할 수 있어 테스트 목적으로 주로 사용된다. / SID :기호 식별자 ① segment identifier 세그먼트 식별자 ② symbolic instruction debugger 기호 명령어 디버거. 

참고 >> https://helloworld2016.tistory.com/78

 

 

 

9. 다음 중 java 언어를 사용하여 DB를 연동할 시, SQL 패키지에 해당하는 클래스의 메소드가 아닌 것은?      1

1) Class의 forName()
2) Statement의 executeQuery()
3) Connection의 createStatement()
4) ResultSet의 next()
5) SQLException의 printstacktrace()

데이터베이스를 활용하여 응용프로그램에서 구현시 관계된 API를 사용할 수 있는지 확인

 

 

 

10. 데이터 중복으로 인해 릴레이션 조작 시 예상하지 못한 곤란한 현상이 발생한다. 이를 무엇이라고 하는가?      4

1) nomalization
2) degree
3) cardinality
4) anomaly
5) relationship

관계형데이터베이스 설계시 발생하는 anomaly 이상현상에 대한 질문

 

 

 

 

11. 다음의 두 릴레이션 간의 관계에서 왜래키는?     2

교수 (교수번호, 교수이름, 학과번호, 직급)
학과 (학과번호, 학과이름, 학과장교수번호, 학생수)

1) 교수이름
2) 학과번호
3) 직급
4) 학생수
5) 학과이름

 

 

 

 

12. 다음 테이블에서 기본키와 왜래키는 무엇인지 찾아보시오.

학생

학번 이름 전공 교수번호
2010001 김사랑 컴공 P010
2010002 박사랑 모바일콘텐츠 P030
2010003 최사랑 모바일콘텐츠 P030
2010004 이사랑 산업공학 P010

 

교수

교수번호 이름
P010 박주현
P020 김주현
P030 황주현

 

다음 표의 키에 해당하는 속성 명을 기술하고 없을 경우 X를 표시하시오.

  기본키 외래키
학생 테이블 학번 교수번호
교수 테이블 교수번호 x

 

관계형데이터베이스 모델의 릴레이션 특징을 이해했는지 확인.

 

 

 

 

13. 다음 중 3-Tier 모델의 연결이 잘못 짝지어진 곳을 모두 고르시오.      4, 5

1) 오라클, 몽고DB - 데이터베이스
2) HTML5 - 클라이언트
3) CSS - 클라이언트
4) JSP - 클라이언트
5) javaScript - 서버

 

계층(Tier) : 컴포넌트들의 물리적인 분리 / 층(Layer) : 컴포넌트들의 논리적인 분리
3-Tier에서 각 계층은 물리적으로도 독립적이며 각 계층의 변경이 다른 계층에 의존하지 않는다.

1. 프레젠테이션(클라이언트) 계층 : 응용 프로그램의 최상위로 서로 다른 층에 있는 데이터 등과 커뮤니케이션을 한다.

- 사용자 인터페이스를 지원한다. (인터넷 브라우저의 정적인 데이터를 제공한다.)    
- 이 계층은 GUI, 또는 front-end도 불린다.
- 비즈니스로직이나 데이터관리코드를 포함해서는 안된다.
- 주로 웹서버를 뜻한다(물리적 : WEB서버)

ex) HTML, javascript, CSS, image

    

2. 애플리케이션 계층 : 비즈니스 로직 계층 또는 트랜잭션 계층이라고도 하는데, 비즈니스 로직은 워크스테이션으로부터의 클라이언트 요청에 대해 마치 서버처럼 행동한다. 차례로 어떤 데이터가 필요한지를 결정하고, 메인프레임 컴퓨터 상에 위치하고 있을 세 번째 계층의 프로그램에 대해서는 마치 클라이언트처럼 행동한다.

- 정보처리의 규칙을 가지고 있다.(동적인 데이터를 제공한다)
- middleware 또는 back-end로 불린다.
- 프레젠테이션코드나 데이터관리 코드를 포함해서는 안된다.
-주로 어플리케이션 서버를 뜻한다(물리적 : WAS서버)

ex) Java EE, ASP.NET, PHP

    

3. 데이터 계층 :  데이터베이스와 그것에 액세스해서 읽거나 쓰는 것을 관리하는 프로그램을 포함한다. 애플리케이션의 조직은 이것보다 더욱 복잡해질 수 있지만, 3계층 관점은 대규모 프로그램에서 일부분에 관해 생각하기에 편리한 방법이다.

-데이터베이스를 주로 뜻한다.
-DB 또는 File System를 접근 및 관리한다.
-back-end라고도 불린다.
-주로 DB서버를 뜻한다(물리적 : DB서버)

ex) MySQL DB, Oracle DB

 

3계층구조를 사용하면 각 계층별로 웹디자이너, 소프트웨어엔지니어, DB관리자가 역할분담을 하여 일을 효율적으로 할 수 있다.
회사 규모 및 사용자의 증가에 따라서 1,2,3계층 구조를 고려해야 한다.(물론 비용은 3계층으로 갈수록 많이 든다.)

[출처] 3 Tier Architecture(3계층 구조)|작성자 리모레모

 

 

 

 

 

14. 클라이언트-서버 네트워크 구성에서 다음 중 틀린 설명은?      5

1) listen - 서버가 클라이언트와의 연결을 대기하는 것
2) connection - 서버와 클라이언트가 연결되는 것
3) request  -  클라이언트가 서버에게 요청하는 것
4) response -  서버가 클라이언트에게 응답하는 것
5) route -  여러 클라이언트의 요청을 서버에서 순서대로 처리하는 것

..

 

 

 

 

15. 신뢰성이 없는 단순한 구조로 전송이 제대로 이루어 졌는지 확인하지 않기 때문에 응답속도가 빠른 실시간 스트리밍 등에 사용하기 위한 통신 프로토콜로 동영상 스트리밍 분야나, VoIP, mVoIP에서 사용하며 온라인 게임의 서버-클라리언트 통신에 주로 사용되는 것은 무엇인가?

* 네트워크에서 TCP/UDP 방식을 이해하는지 확인한다.
>> UDP (User Datagram Protocol)

...더보기

1. TCP/IP 프로토콜 구조

인터넷을 통해 통신을 수행하는 개체는 크게 종단 시스템과 라우터로 나눌 수 있다. 종단 시스템(end-system)은 최종 사용자(end-user)를 위한 애플리케이션을 수행하는 주체가 되며, 인터넷에 연결된 PC, 워크스테이션, PDA, 휴대폰 등이 여기에 속한다. 라우터(router)는 종단 시스템이 속한 네트워크와 다른 네트워크를 연결함으로써 서로 다른 네트워크에 속한 종단 시스템끼리 상호 데이터를 교환할 수 있도록 하는 장비다. 종단 시스템과 라우터간, 라우터와 라우터간, 그리고 종단 시스템과 종단 시스템간 통신을 수행하기 위해서는 정해진 절차와 방법을 따라야 하는데 이를 프로토콜(protocol)이라 부른다. 1~4는 모두 상호 약속한 프로토콜을 이용하여 통신을 수행한다.

인터넷에서 사용하는 핵심적인 프로토콜은 TCP와 IP로, 이를 포함한 각종 프로토콜을 총칭하여 TCP/IP 프로토콜이라 부른다. TCP/IP 프로토콜은 일반적으로 운영체제에서 그 구현을 제공하여, 일반 애플리케이션은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용하여 통신을 수행하게 된다.

애플리케이션간 통신을 수행하기 위해서는 다양한 요구 조건을 만족시켜야 한다. 이러한 요구 조건의 예로는 통신할 대상을 지정하는 상호 약속된 방법, 전송 오류 확인 기능, 오류 발생 시 재전송 기능, 데이터의 순서 관계 유지 등을 들 수 있다. 일반적으로 이와 같은 기능은 프로토콜 수준에서 제공한다. 일반적으로 프로토콜은 기능별로 나누어 계층적으로 구현하며, TCP/IP 프로토콜도 이와 같은 구조를 따른다.

 

2-1. 네트워크 액세스 계층

네트워크 액세스 계층(network access layer)은 물리적 네트워크를 통한 실제적인 데이터 전송을 담당한다. 구성 요소로는 물리적인 신호를 처리하여 데이터를 송수신하는 네트워크 하드웨어 그리고 운영체제가 제공하는 디바이스 드라이버가 있다. 네트워크 액세스 계층에서는 하드웨어적으로 정의된 물리 주소(physical address)를 사용하여 통신을 수행하는데, 이러한 물리 주소는 네트워크 방식에 따라 서로 다르며, 일반적으로 상호 호환되지 않는다.

2-2. 인터넷 계층

인터넷 계층(Internet layer)은 네트워크 액세스 계층의 도움을 받아, 전송 계층이 내려 보낸 데이터를 종단 시스템까지 전달하는 역할을 한다. 네트워크 액세스 계층과 마찬가지로 여기서도 주소를 지정하는 방법이 필요하다. 여기서는 소프트웨어적으로 정의된 논리 주소를 사용하느데 이를 IP주소(Internet Protocol Address)라고 부른다. IP주소는 네트워크 액세스 계층에서 사용하는 물리 주소와는 무관하게 정의하며, 전세계적으로 유일성이 보장된다. 따라서 서로 다른 기술에 기반한 네트워크를 연결하여 인터-네트워크를 구성하는 데 핵심적인 역할을 한다. IP주소는 통신에 참여하는 종단 시스템을 유일하게 지정할 수 있는 방법을 제공하지만, 실제 데이터를 전송하려면 전송 경로를 알아야 한다. 따라서 전송 경로를 알아내기 위해 라우팅 작업이 필요하게 된다. 라우팅(routing)이란 목적지까지 데이터를 전달하기 위한 일련의 작업을 가리키는 용어로, 라우팅을 위한 정보를 획득하는 작업과 라우팅 정보를 기초로 실제 데이터를 전달(forward)하는 작업을 포함한다. 라우팅을 담당하는 전용 컴퓨터를 라우터(router)라 부르며, 라우터를 통해 다양한 종류의 네트워크가 연결되어 통신을 수행할 수 있다.

2-3. 전송 계층

전송 계층(transport layer)은 최종적인 통신 목적지를 지정하고, 오류 없이 데이터를 전송하는 역할을 한다. 인터넷 계층이 담당하는 역할은 IP주소와 라우팅을 이요하여 목적지 종단 시스템에 데이터가 도달할 수 있도록 하는 것이다. 그러나 통신의 최종 목적지는 컴퓨터가 아닌 해당 컴퓨터에서 실행되고 있는 프로그렘(프로세스)이다. 따라서 전송 계층에서는 해당 프로세스를 지정하는 일종의 주소를 사용하며, 이를 포트 번호(port number)라 부른다.

인터넷 계층의 IP가 제공하는 전송 서비스는 최선을 다하지만(best-effort), 신뢰성은 없다는(unreliable) 특징이 있다. 즉, 데이터에 문제가 생기면 목적지에 도달하지 못하는 상황이 발생할 수 있으며, 목적지에 도달하였더라도 실제 데이터의 내용이 손상됐을 가능성도 있게 된다. 전송 계층에서는 이러한 데이터 손실 또는 손상을 검출하여 잘못된 데이터가 목적지 프로세스에 전달되는 것을 방지한다.

TCP/IP 프로토콜에서 전송 계층에 해당하는 프로토콜로는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)이 있다.

2-4. 애플리케이션 계층

애플리케이션 계층(application layer)은 전송 계층을 기반으로 한 다수의 프로토콜(Telnet, FTP, HTTP, SMTP, ...)과 이 프로토콜을 이용하는 애플리케이션을 포괄한다.

 

3. 패킷 전송 원리

애플리케이션에서 보내는 데이터를 목적지까지 전송하기 위해서는 각각의 프로토콜에서 정의한 제어 정보(IP주소, 포트번호, 오류 체크 코드, ...)가 필요하다. 제어 정보는 위치에 따라, 앞쪽에 붙는 헤더(header)와 뒤쪽에 붙는 트레일러(trailer)로 나눌 수 있다. 이러한 제어 정보가 결합된 형태로 실제 데이터가 전송되는데 이를 패킷(packet)이라 부른다. 송신측에서 보낸 데이터는 TCP/IP/이더넷 계층을 지나면서 헤더 또를 트레일러 형태로 제어 정보가 덧붙여진 패킷이 생성된다. 이 패킷이 수신측에 도달하면 이더넷/IP/TCP 계층을 지나면서 차례대로 헤더 또는 트레일러가 제거되고 최종적으로 송신측이 보낸 데이터를 애플리케이션이 받게 된다.

패킷 전송 형태 (송신측, 수신측)

각 계층은 마치 동일한 위치의 상대편 계층과 통신을 하는 것으로 간주할 수 있다. 이로 인해 애플리케이션 프로그래머는 주고 받을 데이터에만 집중하여 구현하면 되고, 나머지 부분은 운영체제가 제공하는 프로토콜이 처리하는 것이다.

패킷 전송 형태 - 계층별

TCP/IP 계층간 통신

IP 주소, 포트 번호

TCP/IP 프로토콜을 이용하여 통신할 때는 IP주소와 포트 번호를 사용한다. IP주소는 32비트 값으로 일반적으로 8비트 단위로 구분하여 각각 10진수로 표기한다.(127.0.0.1)

폐쇄된 네트워크나 IP를 공유하는 경우가 아니라면 IP주소는 전세계적으로 유일한 값을 가진다. 라우터가 라우팅을 할 때는 IP헤더에 포함된 수신자 IP주소를 이용하며, 데이터를 받는 쪽에서 답장을 보내고자 할 때도 역시 IP헤더에 포함된 송신자 IP주소를 이용한다.

IP주소는 인터넷에 존재하는 호스트(종단 시스템, 라우터)를 유일하게 구별할 수 있지만 통신의 최종 주체인 프로세스를 식별하지는 못한다. 포트 번호는 각 프로세스를 구별하는 식별자다. 한 프로세스가 두 개 이상의 포트 번호를 사용하는 경우가 종종 있으며, 한 포트 번호를 두 개 이상의 프로세스가 사용하는 것도 가능하다. 따라서 포트 번호는 프로세스를 구별하는 식별자라기보다는 통신의 종착지를 나타내는 식별자로 보는 것이 바람직하다.

출처 : https://m.blog.naver.com/PostView.nhn?blogId=ehdrhs1004&logNo=220323625791&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

 

 

 

16. 다음 중 AJAX에 대한 설명으로 틀린 설명은?      4

1) 비동기 전송 방식이다.
2) 데이터의 형식은 XML 뿐만아니라 JSON도 지원한다.
3) 요청함수 구현 시 응답받을 콜백 함수의 참조를 지정한다.
4) 클라이언트 - 서버 사이의 통신 외에 서버내부 간의 통신에도 사용한다.
5) javascript로만 구현된다.

* 비동기 통신 방식을 이해하고 요청과 응답을 처리할 수 있으며, 콜백의 개념을 알고 있는 지 확인한다. 

AJAX : JavaScript의 라이브러리중 하나. Asynchronous Javascript And Xml(비동기식 자바스크립트와 xml)의 약자. 브라우저가 가지고있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법.
Ajax를 한마디로 정의하자면 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술.

 

 

 

 

17. 인터넷 프로토콜로 사용되는 TCP/IP 의 계층화 모델 중 네트워크 계층에서 사용되는 프로토콜은?      3

1) FTP
2) SMTP
3) IP
4) UDP
5) TCP

* 네트워크의 TCP/IP 계층화 모델을 이해하는지 확인

 

 

 

18. http 프로토콜은 OSI 7 계층 중 어느 계층인가?      2

1) 데이터링크 계층
2) 응용 계층
3) 트랜스포트 계층
4) 세션 계층
5) 네트워크 계층

* OSI 7 계층의 이해 확인

 

 

 

19. 다음 중 IDE (통합개발환경)이 아닌 것은?        4

1) Visual Studio
2) Eclipse
3) Android Studio
4) SQL Developer
5) X-Code

 

 

 

20. git은 버전관리 패키지로써 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다. 리눅스 우분트 OS에서 CLI 명령어로 git 패키지를 설치하는 명령어를 서술하시오.

$ sudo ______________________________

* 버전관리 시스템 구축방법
>> apt-get install git

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

데이터베이스 구현 과목 관련능력은 DBMS 설치하기, 데이터베이스 생성하기, 데이터베이스 오브젝트 생성하기 등이 있겠다. 이번 과목은 총 13문항의 시험을 치뤘었다. 다른 과목은 아래 링크로 이동...

 

 

자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션 배포 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 프로그래밍언어활용 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션테스트 문제

 

[데이터베이스 생성하기]

1. 다음 중 SCOTT 계정에 테이블 생성 권한을 주는 방법으로 올바른 것은?     1

1) GRANT CREATE TABLE TO SCOTT
2) GRANT DROP ANY TABLE TO SCOTT
3) GRANT CREATE SESSION TO SCOTT
4) 위 사항 모두 옳다.

 

 

2.  데이터베이스 CONNECT 롤에 대한 설명으로 틀린 것은?     4

1) CREATE VIEW 권한을 가지고 있다.
2) CREATE SESSION 권한을 가지고 있다. 
3) CREATE SEQUENCE 권한을 가지고 있다.
4) CREATE CLUSTER 권한을 가지고 있다.

오라클 데이터베이스를 설치하면 기본적으로 CONNECT, RESOURCE, DBA ROLE이 제공 
커넥트 롤 : 접속 권한
리소스 롤 : 객체의 생성 변경 삭제 등 기본 시스템 권한
DBA : 데이터베이스 관리
SYSDBA : 데이터베이스 시작 종료 관리 권한
SYSOPER :  SYSDBA + 데이터베이스 생성 권한

 

 

 

 

3. 다음 중 테이블 스페이스에 대한 설명으로 옳지 않은 것은?     4

1) 테이블 스페이스는 테이블이 저장되는 공간이다.
2) 테이블 스페이스를 나누는 이유는 관리와 퍼포먼스의 향상을 위해서이다.
3) 테이블 스페이스는 만들지 않으면 ORACLE 서버를 설치할 때 자동으로 생성해준다.
4) 테이블 스페이스는 적을수록 좋다.

테이블 스페이스 : 테이블 및 인덱스를 저장해놓은 오라클의 논리적인 공간.
오라클은 물리적인 공간에 저장시킨 후 메모리에 등재시킨다.

실제 물리적인 공간은 데이터파일(DBF)이다. 테이블 스페이스의 관리는 관리자만 가능하다.

 

 

 

[데이터베이스 오브젝트 생성하기]

4. 다음은 주문 테이블 생성 시 custid(고객번호) - NUMBER, NOT NULL 제약조건, 왜래키(NewCustomer.custid, 연쇄삭제) 부분을 설정하는 문장이다. ( ) 안을 채우시오.

FOREIGN KEY (custid) REFERENCES NewCustomer(custid) ON DELETE(    )

CASCADE

제약 조건이 설정되면 그 규칙에 따라 데이터 무결성이 보장되는 반면 특정 업무 수행 과정에서는 제약 조건때문에 작업 진행이 안되고, 제약조건을 삭제하자니 데이터 무결성을 잃게 된다. 따라서 제약조건을 DISABLE CONSTRAINT로 비활성화시켜 제약 조건을 삭제하지 않고도 제약조건 사용을 잠시 보류할 수 있도록 해 준다. 활성화시킬 때에는 ENABLE CONSTRAINT 로 해제한다.

부모 TABLE과 자식테이블 간의 참조 설정이 되어 있을 때는 부모 테이블의 제약 조건을 비활성화하면서 참조하고 있는 자식테이블의 제약조건까지 같이 비활성화시키는 CASCADE 옵션도 있다. 낱개로 한다면 순서는 자식테이블의 왜래키에 대한 제약조건 비활성화, 부모테이블의 기본키에 대한 제약조건 비활성화로 해제 진행되는데 CASCADE는 한번에 된다는 것.

 

 

 

 

5. NewBook 테이블에  VARCHAR2(13) 의 자료형을 가진 isbn 속성을 추가하는  DDL문을 작성하시오.

ALTER TABLE NewBook(     )(      ) VARCHAR2(13);

ADD
isbn

 

 

 

6. 다음 중 데이터 정의어(DDL)가 아닌 것은?      3

1)  CREATE
2)  ALTER
3)  INSERT
4)  DROP

DML 데이터조작어 :  select, insert, update, delete
DDL 데이터정의어 :  create, alter, drop, rename, truncate
DCL 데이터제어어 : grant, revoke
TCL 트랜잭션제어어 : commit, rollback, savepoint


 

 

7. 다음은 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰를 만든 것이다. (  ) 에 알맞은 것은?      1

CREATE VIEW vw_Customer
(      ) SELECT *
	FROM Customer
	WHERE address LIKE '%대한민국%';

1)  AS
2) ON
3) IN
4) EXISTS

뷰는 실제테이블을 참고로 가상테이블을 제공, 테이블의 데이터를 제한하며 복수의 테이블에서 데이터를 검색하기 위한 객체이다. 뷰를 사용하는 목적은 데이터 접근 제한, 복잡한 쿼리 간소회, 데이터 독립성 확보, 동일데이터를 서로 다른 뷰에게 제공하는 목적이 있다.

 

 

[DBSM 설치하기]

8. 오라클을 설치할 때 옳지 않은 것은?       3

1) 오라클은 영어 폴더 밑에 설치한다.
2) 교육용 버전은 XE를 설치한다.
3) 윈도우 계정명은 한글로 되어 있어도 상관없다.
4) 오라클 포트는 8080이기 때문에 톰캣은 8080을 사용하면 안된다.

 

 

 

[데이터베이스 생성하기]

9. 다음 중 데이터베이스 시스템 권한 종류 설명이 서로 맞지 않는 것은?    2

1) CREATE USER  -  데이터 베이스 유저 생성 권한
2) CREATE SEQUENCE - 관리자 계정 생성
3) SELECT ANY TABLE - 모든 유저의 테이블 생성 권한
4) CREATE SESSION  - 데이터베이스 접속 권한

 

ORCLE에서는 오라클 내부 system(OS system과는 다른 개념의 oracle DB의 system을 말한다.)권한과 Object권한으로 나뉘어진다.
※시스템 권한 - 데이터베이스 접속, 사용자 생성 및 오브젝트 생성 등의 권한
※오브젝트 권한 - 해당 오브젝트에 대한 전반적인 작업을 위한 권한

 

...더보기

오브젝트 권한

오브젝트 권한은 해당 오브젝트에 특정 SQL을 수행할 수 있게 해주는 권한으로 오브젝트의 소유자는 해당 오브젝트에 대한 모든 권한을 가지게 되며, 자신의 오브젝트에 대한 특정 권한을 다른 유저에게 부여할 수 있습니다.  아래는 테이블 및 뷰에 부여할 수 있는 오브젝트 권한입니다.

 

 

 

 

 

 

[데이터베이스 오브젝트 생성하기]

10. emp 테이블과 동일한 구조의 테이블을 emp3 이름으로 생성하되 테이블 구조만 가져오고 데이터는 가져오지 않도록 하는 쿼리를 완성하시오.

CREATE TABLE ____________ (1)
AS
	SELECT * FROM emp
	WHERE ______________ ; (2)


1: emp3
2: 1=2

 

 

 

 

[데이터베이스 생성하기]

11. Password PROFILE 생성하는 명령문이다. 로그인 시도 5회 실패 시 계정을 30일 동안 사용 못하게 하도록 문장 완성을 위해 아래 예에서 적당한 SQL 문을 2개 고르시오.    1   2

CREATE PROFILE prof_password LIMIT
(           )
(           ) ;

1) FAILED_LOGIN_ATTEMPTS 5
2) PASSWORD_LOCK_TIME 30
3) PASSWORD_LIFE_TIME 30
4) PASSWORD_REUSE_TIME 30

 

 

 

12. 'ora_user'라는 사용자를 생성하려고 한다. 비밀번호는 'hong'이고 기본 테이블스페이스는 'MYTS', 임시 테이블스페이스는 'TEMP'를 사용하는 사용자 생성 구문을 기술하시오.

CREATE USER ora_user IDENTIFIED BY hong
(           ) TABLESPACE myts
(           ) TABLESPACE temp;

DEFAULT
TEMPORARY

 

 

 

13. hr 사용자에게 scott 사용자가 만든 emp 테이블을 SELECT 할 수 있도록 권한을 할당하는 구문을 기술하시오. 그리고 hr 사용자가 이 권한을 다름 사람에게 줄 수 있도록 하시오.

GRANT SELECT ON scott.emp TO hr WITH GRANT OPTION;

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

11. 파일처리.pptx
7.48MB

 

파일업로드는 insert와 delete, 추가만 있다.
fileUploadEx 라는 이름의 스프링 레거시 프로젝트를 만든다.

 

 

C 루트에 upload/temp 폴더를 만든다.

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.lje</groupId>
	<artifactId>aopexam</artifactId>
	<name>aopExam</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.1.9.RELEASE</org.springframework-version>
		<org.aspectj-version>1.9.4</org.aspectj-version>
		<org.slf4j-version>1.7.25</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>

		<!-- Servlet -->
		<!-- <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> 
			<version>2.5</version> <scope>provided</scope> </dependency> -->
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<!-- 스프링프레임워크 랑 똑같은 버전으로 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.1.9.RELEASE</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.8</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.9.4</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.4</version>
		</dependency>

		<!-- 추가한 것 -->
		<!-- https://mvnrepository.com/artifact/com.googlecode.log4jdbc/log4jdbc -->
		<dependency>
			<groupId>com.googlecode.log4jdbc</groupId>
			<artifactId>log4jdbc</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.1.9.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>5.1.9.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.7.0</version>
		</dependency>


	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.9</version>
				<configuration>
					<additionalProjectnatures>
						<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
					</additionalProjectnatures>
					<additionalBuildcommands>
						<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
					</additionalBuildcommands>
					<downloadSources>true</downloadSources>
					<downloadJavadocs>true</downloadJavadocs>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<version>1.2.1</version>
				<configuration>
					<mainClass>org.test.int1.Main</mainClass>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

 

web.xml (한글처리)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
	id = "WebApp_ID">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<multipart-config>
			<location>C:\\upload\\temp</location>
			<max-file-size>20971520</max-file-size> <!-- 한파일: 1mb * 20 -->
			<max-request-size>41943040</max-request-size> <!-- 한번에 여러개올리는데 전체가 40mb -->
			<file-size-threshold>20971520</file-size-threshold> <!-- 넘으면 temp에 넣고 업로드에 들어가지 않는다 : 20mb -->
		</multipart-config>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- spring character encoding filter -->
	<filter>
           <filter-name>encoding</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
           <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
           </init-param>
     </filter>
    
     <filter-mapping>
           <filter-name>encoding</filter-name>
           <url-pattern>/*</url-pattern>
     </filter-mapping>

</web-app>

 

 

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.lje.fileupload_ex" />
	<beans:bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"></beans:bean>
	
	
</beans:beans>

 

 

 

FileUploadController.java

package com.lje.fileupload_ex.controller;

import java.io.File;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

import com.lje.fileupload_ex.domain.BoardVO;

import lombok.extern.java.Log;

@Controller
@Log
public class FileUploadController {
	String uploadFolder = "c:\\upload";
	
	@GetMapping("/upload")
	public void uploadForm() {
		log.info("upload form");
	}
	
	@PostMapping("/upload")
	public String upload(MultipartFile[] uploadFile, Model model) { //multiparfile : 여러개파일한번에
		for(MultipartFile multipartFile : uploadFile ) {
			log.info("=============================");
			log.info("upload file name:"+multipartFile.getOriginalFilename());
			log.info("upload file name:"+multipartFile.getSize());
			
			File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename()); //uploadFolder 주소 밑에 경로 생성
			try {
				multipartFile.transferTo(saveFile); //파일을 이동해서 복사 (업로드됨)
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return "redirect:list";
	}
	
	@GetMapping("/list")
	public String list(Model model) {
		return "list";
	}
	
	@GetMapping("/upload2")
	public void uploadForm2() {
		log.info("upload form");
	}
	
	@PostMapping("/upload2")
	public String upload2(MultipartFile[] uploadFile, 
			@ModelAttribute("board") BoardVO board) { //multiparfile : 여러개파일한번에
		log.info("board:"+board);
		
		for(MultipartFile multipartFile : uploadFile ) {
			log.info("=============================");
			log.info("upload file name:"+multipartFile.getOriginalFilename());
			log.info("upload file name:"+multipartFile.getSize());
			
			File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename()); //uploadFolder 주소 밑에 경로 생성
			try {
				multipartFile.transferTo(saveFile); //파일을 이동해서 복사 (업로드됨)
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return "redirect:list";
	}
	
}

 

 

 

list.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>list page</title>
</head>
<body>
<h1>
	list page  
</h1>

<P> This page is list page </P>
</body>
</html>

 

 

upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="upload" method="post" enctype="multipart/form-data">
		<input type="file" name="uploadFile" multiple><br><br>
		<button>Submit</button>
	</form>
</body>
</html>

 

 

upload2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일 업로드 하기</title>
</head>
<body>
	<form action="upload2" method="post" enctype="multipart/form-data">
		<table>
			<tr><td>제목</td><td><input type="text" name="title"></td></tr>
			<tr><td>내용</td><td><textarea rows="5" cols="50" name="content"></textarea></td></tr>
			<tr><td>작성자</td><td><input type="text" name="writer"></td></tr>
			<tr><td>파일</td><td><input type="file" name="uploadFile"></td></tr>
			<tr><td colspan="2"><input type="submit" value="저장"></td></tr>
		</table>
	</form>
</body>
</html>

 

 

 

BoardVO.java

package com.lje.fileupload_ex.domain;

import java.util.List;

import lombok.Data;

@Data
public class BoardVO {
	private int bno;
	private String title;
	private String content;
	private String writer;
	private List<SaveFile> fileList;
	// 게시글과 해당하는 파일
}

 

 

테이블 만들기

create table file_board(
bno number primary key,
title varchar2(100) not null,
content VARCHAR2(1000) not null,
writer VARCHAR2(50) not null);

create SEQUENCE seq_file_board;

CREATE TABLE save_file(
fno number PRIMARY KEY,
file_name VARCHAR2(200) not null,
bno number REFERENCES file_board(bno));

CREATE SEQUENCE seq_save_file;


Save_file 제약조건 > 왜래키 > 삭제 시 설정 조정한다.
널 설정, 종속삭제 두 가지가 있는데 종속삭제는 bno를 지웠을 때 같이 지워진다.

 

SaveFile.java

package com.lje.fileupload_ex.domain;

import lombok.Data;

@Data
public class SaveFile {
	private int fno;
	private int bno;
	private String filename;
}

 

 

root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
		<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
			<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy" />
			<property name="url" value="jdbc:log4jdvc:oracle:thin:@192.168.0.78:1521:XE" />
				
			<property name="username" value="mvc" />
			<property name="password" value="1234" />
		</bean>
		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
			<property name="dataSource" ref="dataSource" /> 
		</bean>
		
		<mybatis-spring:scan base-package="com.lje.fileupload_ex.mapper" />
		<context:component-scan base-package="com.lje.fileupload_ex" />
		
</beans>

 

 

 

mapper

 

BoardMapper.xml

<?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="com.lje.fileupload_ex.mapper.BoardMapper">
	<insert id = "register">
		insert into file_board (bno, title, content, writer)
		values(seq_file_board.nextval, ${title}, #{content}, #{writer})
	</insert>
	<select id="get" resultType="com.lje.fileupload_ex.domain.BoardVO">
		select * from file_board where bno=#{bno}
	</select>
	<select id="getList" resultType="com.lje.fileupload_ex.domain.BoardVO">
		select * from file_board;
	</select>
	<update id = "update">
		update file_board set title=#{title}, content=#{content}
		where bno = #{bno}
	</update>
	<delete id = "delete">
		delete from file_board where bno = #{bno}
	</delete>
</mapper>

 

 

FileMapper.xml

<?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="com.lje.fileupload_ex.mapper.BoardMapper">
	<select id="get" resultType="com.lje.fileupload_ex.domain.SaveFile">
		select * from save_file where fno=#{fno}
	</select>
	<select id="getList" resultType="com.lje.fileupload_ex.domain.SaveFile">
		select * from save_file where bno=#{bno}
	</select>
	<insert id="register">
		insert into save_file(fno, filename, bno)
		values(seq_save_file.nextval, #{filename}, #{bno})
	</insert>
	<delete id="delete">
		delete from save_file where fno = #{fno}
	</delete>
	<delete id="deleteList">
		delete from save_file where bno = #{bno}
	</delete>
</mapper>

 

 

 

FileMapper.java (interface)

package com.lje.fileupload_ex.mapper;

import java.util.List;

import com.lje.fileupload_ex.domain.SaveFile;

public interface FileMapper {
	public void register(SaveFile saveFile);
	public void delete(int fno);
	public SaveFile get(int fno);
	public List<SaveFile> getList(int bno);
	public void deleteList(int fno);
}

 

 

BoardMapper.java (interface)

package com.lje.fileupload_ex.mapper;

import java.util.List;

import com.lje.fileupload_ex.domain.BoardVO;


public interface BoardMapper {
	public void register(BoardVO vo);
	public void update(BoardVO vo);
	public void delete(int bno);
	public BoardVO get(int bno);
	public List<BoardVO> getList();
}

 

 

 

Service


BoardService.java (interface)

package com.lje.fileupload_ex.service;

import java.util.List;

import com.lje.fileupload_ex.domain.BoardVO;
import com.lje.fileupload_ex.domain.SaveFile;

public interface BoardService {
	public void register(BoardVO vo, List<SaveFile> fileList);
	public void modify(BoardVO vo);
	public void remove(int bno);
	public BoardVO read(int bno);
	public List<BoardVO> getList();
	public void removeFile(int fno);
	public void registerFile(List<SaveFile> fileList);
}

 

 

 

BoardServiceImpl.java

package com.lje.fileupload_ex.service;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.lje.fileupload_ex.domain.BoardVO;
import com.lje.fileupload_ex.domain.SaveFile;
import com.lje.fileupload_ex.mapper.BoardMapper;
import com.lje.fileupload_ex.mapper.FileMapper;

import lombok.AllArgsConstructor;
import lombok.extern.java.Log;

@Service
@Log
@AllArgsConstructor
public class BoardServiceImpl implements BoardService {
	private BoardMapper bMapper;
	private FileMapper fMapper;
	
	@Transactional //트랜잭션 두개 이상의 함수
	@Override
	//파일이 입력되거나 실패되면 전체 롤백됨.
	public void register(BoardVO vo, List<SaveFile> fileList) {
		log.info("Service.register..."+vo);
		bMapper.register(vo);
		registerFile(fileList); 
//		for(int i=0; i<fileList.size(); i++) {
//			fMapper.register(fileList.get(i));
//			log.info("Save file:"+fileList.get(i));
//		}
	}
	@Override
	public void modify(BoardVO vo) {
		bMapper.update(vo);
	}
	@Transactional
	@Override
	public void remove(int bno) { //파일은 게시글과 함께 지워진다.
		fMapper.delete(bno);
		bMapper.delete(bno);
	}
	@Override
	public BoardVO read(int bno) {  //데이터 가져오는거라 트랜젝션 ㄴㄴ
		List<SaveFile> fileList=fMapper.getList(bno);
		BoardVO vo=bMapper.get(bno);
		vo.setFileList(fileList);
		return vo;
	}
	@Override
	public List<BoardVO> getList() {
		return bMapper.getList();
	}
	@Override
	public void removeFile(int fno) {
		fMapper.delete(fno);
	}
	@Override
	public void registerFile(List<SaveFile> fileList) {
		for(int i=0; i<fileList.size(); i++) {
			fMapper.register(fileList.get(i));
			log.info("Save file:"+fileList.get(i));
		}
		
	}	
}
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

10. AOP와 트랜잭션.pdf
2.16MB

 

1. Spring AOP와 트랜잭션 관리
2. 샘플 프로젝트의 생성과 AOP적용 준비
3. AOP 연습하기
4. Spring의 트랜잭션 처리
5. 게시판의 댓글 트랜잭션 처리

 


 

1. Spring AOP와 트랜잭션 관리



AOP라는 용어와 의미

관점지향 : AOP(Aspect Oriented Programming)지원
핵심 개념은 ‘공통 관심사(Cross-concern)의 분리’ (주목적은 아니다)
OOP를 보다 완성도 높게 만들어 주는 패러다임

 

Proxy객체

• Spring의 AOP는 메소드 단위로 만들어지며, 실제로는 원래의 객체를 감싸는 바깥쪽 Proxy객체가 만들어지는 방식으로 호출 된다.

 

 


실습하기

 

* 스프링 레거시 프로젝트 명 : aopExam

1. pom.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.lje</groupId>
	<artifactId>aopexam</artifactId>
	<name>aopExam</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.1.9.RELEASE</org.springframework-version>
		<org.aspectj-version>1.9.4</org.aspectj-version>
		<org.slf4j-version>1.7.25</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>

		<!-- Servlet -->
		<!-- <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> 
			<version>2.5</version> <scope>provided</scope> </dependency> -->
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<!-- 스프링프레임워크 랑 똑같은 버전으로 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.1.9.RELEASE</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.8</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.9.4</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.4</version>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.9</version>
				<configuration>
					<additionalProjectnatures>
						<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
					</additionalProjectnatures>
					<additionalBuildcommands>
						<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
					</additionalBuildcommands>
					<downloadSources>true</downloadSources>
					<downloadJavadocs>true</downloadJavadocs>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<version>1.2.1</version>
				<configuration>
					<mainClass>org.test.int1.Main</mainClass>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
	<!-- 2.5에서 3.1로 수정 -->
	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- spring character encoding filter -->
	<filter>
           <filter-name>encoding</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
           <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
           </init-param>
     </filter>
    
     <filter-mapping>
           <filter-name>encoding</filter-name>
           <url-pattern>/*</url-pattern>
     </filter-mapping>


</web-app>

 

 

3. 서버에서 잘 돌아가나 확인한다.

 

 

4. 서비스 >SampleService.java (인터페이스)

package com.lje.aopexam.service;

public interface SampleService {
	public Integer doAdd(String str1, String str2) throws Exception;
}

 

 

5. SampleServiceImpl.java

 

package com.lje.aopexam.service;

import org.springframework.stereotype.Service;

@Service
public class SampleServiceImpl implements SampleService {

	@Override
	public Integer doAdd(String str1, String str2) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

}

 

 

6. aop > LogAdvice.java (어드바이스 구현)

package com.lje.aopexam.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import lombok.extern.java.Log;

@Aspect
@Log
@Component
public class LogAdvice {  //어드바이스 객체
	/* 포인트컷 지정. 서비스 패키지로 시작하는 클래스의 모든 메소드..모든 접근제어자 다 됨 */
	/* * : 0번이상 반복 */
	@Before( "execution(* com.lje.aopexam.service.SampleServie*.*(..))") 
	public void logBefore() {
		 log.info("=========================");
		 
	 }
	@After( "execution(* com.lje.aopexam.service.SampleServie*.*(..))") 
	public void logAfter() {
		 log.info("+++++++++++++++++++++++++");
	}
}

 

 

7. root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<context:annotation-config></context:annotation-config>
	<context:component-scan base-package = "com.lje.aopexam.service" />
	<context:component-scan base-package = "com.lje.aopexam.aop" />
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

 

 

SampleServiceTest.java

package com.lje.aopexam;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.lje.aopexam.service.SampleService;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@Log4j
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class SampleServiceTest {
	@Setter(onMethod_=@Autowired)
	private SampleService service;
	
	@Test
	public void testClass() {
		log.info(service);
		log.info(service.getClass());
	}
}

 

>> 테스트 해보기

제이유닛테스트

 

>> aop 적용 ( log.info("========================="); 나와야함)

package com.lje.aopexam;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.lje.aopexam.service.SampleService;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@Log4j
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class SampleServiceTest {
	@Setter(onMethod_=@Autowired)
	private SampleService service;
	
	@Test
	public void testClass() {
		log.info(service);
		log.info(service.getClass());
	}
	
	@Test
	public void testAdd() throws Exception{
		log.info(service.doAdd("123", "456"));
	}
}

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

애플리케이션배포 과목은 총 50분동안 15문항을 푸는 방식입니다.
다른 관련 과목도 아래 링크에 연결해두었습니다.


자바기반 앱개발 & 웹서비스 구축개발 :: 애플리케이션테스트 문제와 답

자바기반 앱개발 & 웹서비스 구축개발 :: 프로그래밍언어활용 문제와 답


 

 

[애플리케이션 배포 환경 구성하기]

1. import문은 언제 사용하며, import 문이 의미하는 바는 무엇인가?

>> 애플리케이션 빌드와 배포를 위한 환경 구성 방안 계획 여부
답 : import 문은 다른 패키지에 있는 클래스를 사용할 때 코드의 서두에 선언하는 것으로 컴파일러에게 그 클래스의 경로명을 알려주는 구문입니다.

 

 

2. 자신의 컴퓨터에 설치된 java의 경로를 확인하여 JAVA_HOME에 JDK bin 경로를 설정하고 path에 추가하시오.

>> 애플리케이션 빌드와 배포를 위한 환경 구성 방안 계획 여부
답 : 시스템 설정 > 환경변수 > 새로만들기 > 변수명 : JAVA_HOME에 경로: c:\~jdk.1.8.0_201/bin 을 넣고 path > 편집 > %JAVA_HOME% 을 추가한다.

 

 

3. 어떤 패키지에 속한 클래스는 import 문 없이도 사용할 수 있는가?

>> 애플리케이션 소스코드 검증 결과 문제가 없는 경우 해당 소스코드를 빌드시스템으로 이관할 수 있는 지의 여부
답 : java.lang 패키지

 

 

[애플리케이션 소스 검증하기]

4.  다음 설명에 해당하는 버전도구는 무엇인가?      

- 분산저장소 방식으로 로컬저장소와 원격저장소 구조를 가진다.
- 원격저장소에서 로컬에 복사(clone)한 순간 개발자 자신만의 로컬저장소에서 생성된다.
- 개발 완료한 파일 수정 이후 로컬저장소에 커밋한 이후 다시 원격저장소에 반영(push)하는 방식이다.

1) RCS
2) CVS
3) SVN
4) Git

>> 애플리케이션 버전 도구를 이해하고 활용할 수 있는지 확인한다.
답 : 4

 

 

 

[애플리케이션 배포 환경 구성하기]

5. 패키지에 대한 설명 중 잘못된 것은?     

1) package 키워드를 이용하여 패키지를 선언한다.
2) 서로 관련된 클래스와 인터페이스들을 하나의 디렉터리에 묶어 놓은 것이다.
3) 패키지는 컴파일된 클래스 파일들을 저장하는 위치를 지정한다.
4) 자바 JDK는 클래스들을 모두 하나의 패키지에 담아 제공한다.

>> 애플리케이션 실행 환경에 대한 정보를 확인할 수 있는지 확인한다.
답 : 4

자바 JDK는 수많은 클래스들을 제공하는데, 서로 관련 있는 클래스들을 하나의 패키지로 구성하는 식으로 수많은 패키지에 분산 저장하여 제공한다.
 

 

 

[애플리케이션 빌드하기]

[6~8] 다음 물음에 답하라.

6. 다음 클래스를 test 패키지에 속하게 하고자 한다. 빈칸에 적합한 코드를 작성하라.

__________________________________________;

public class TV{
	private int size;
	public TV(int size) { this.size=size; }
}

 

>> 애플리케이션 소스코드 검증 결과 문제가 없는 경우 해당 소스코드를 빌드 시스템으로 이관할 수 있는 지 확인한다.
답 : package device;

 

 

 

 

7. 앞에서 작성한 TV클래스를 활용하는 Home 클래스를 작성한다. Home 클래스를 app 패키지에 저장하고자 할 때 빈칸에 적합한 코드를 작성하라.

__________________________________________;
__________________________________________;

public class Home {
	public Home( ) { TV myTv = new TV(65); }
}

 

>> 애플리케이션 소스코드 검증 결과 문제가 없는 경우 해당 소스코드를 빌드 시스템으로 이관할 수 있는 지 확인한다.


package app;
import device.TV;

 

 

 

 

 

 

 

8. TV 클래스와 Home 클래스를 컴파일한 TV.class와 Home.class의 경로명은?

>> 애플리케이션 빌드 실행 결과를 확인하여 정상 완료됐는지를 체크할 수 있는 지 여부 확인

답 : TV 클래스를 컴파일한 TV.class파일의 경로명은 프로젝트명/bin/test/TV.class이고,
Home 클래스를 컴파일한 Home.class 파일의 경로명은 프로젝트명/bin/app/Home.class 이다.
bin 대신 build 사용 가능하다.

 

 

 

[애플리케이션 소스 검증하기]

9. 다음 코드의 실행 결과와 이유를 말하라.

String a = "가나다라";
System.out.println(a=="가나다라");
String b = new String(a);
System.out.println(a==b);

 

>> 소스코드 검증 도구를 활용하여 애플리케이션에서 사용한 라이브러리, 소스, 로직 등의 오류 여부를 검증할 수 있는 지 확인

[실행결과]
true
false

[이유]
"가나다라" 문자열은 자바 가상 기계의 스트링 리터럴 테이블에 저장되고, String a의 레퍼런스 a는 리터럴 테이블을 가리키므로, "가나다라" 문자열의 레퍼런스와 레퍼런스 a의 값은 일치한다. 그러므로 a=="가나다라"의 비교 연산은 true다. 하지만 new String(a)에 의해 생성되는 객체는 힙에 생성되므로 String b는 힙 영역을 가리킨다. 그러므로 a==b 연산에서 a와 b의 레퍼런스 값은 서로 달라 연산 결과 false가 된다.

 

 

 

[10~11] 다음 코드에 대해 물음에 답하여라.

String a = "Hello";
String b = "Hello";
String c = "Java";
String d = new String("Hello");
String e = new String("Java");
String f = new String("Java");

10. a와 == 연산을 수행하였을 때 true가 되는 문자열을 b~f 중 모두 골라라.     b

11. f와 equals( ) 연산을 수행하였을 때 true가 되는 문자열을 a~e 중 모두 골라라.       c, e

 

>> 소스코드 검증 도구를 활용하여 애플리케이션에서 사용한 라이브러리, 소스, 로직 등의 오류 여부를 검증할 수 있는 지 확인

equals() : 객체끼리 내용(값)을 비교할 수 있는 메소드
== : 객체의 참조값(주소)을 비교하는 연산자

 

 

 

 

[애플리케이션 배포하기]

12. Java Project를 자동실행 가능한 형태로 배포하는 방법을 적으시오.

>> 이클립스에서 자동 실행 파일형태로 배포하는 방법을 알고 있는지 테스트
답 : 프로젝트에서 우클릭 > export > Runnable JAR File 선택 후 next 버튼 클릭 > 선택한 프로젝트 폴더에 000.jar 를 저장한다.

 

 

 

13. 이클립스에서 만들어진 웹프로젝트를 war로 export하여 톰캣 서버로 전송하여 배포하는 방법을 서술하시오.

>> 이클립스에서 생성된 웹프로젝트를 톰캣 서버에 애플리케이션으로 배포할 수 있는 지 확인

답 : 프로젝트 > export > war File 브라우저를 클릭한 후 ~/tomcat/webApp 선택,
선택된 프로젝트를 war로 배포한 후 tomact/bin/startup 실행 후 압축이 풀렸는지 확인한다.

 

 

 

14. 이클립스에 설정한 톰캣 서버에서 프로젝트 톰캣 서버에 등록된 것을 확인할 수 있는 파일을 적으시오.

 

>> 이클립스에서 생성된 웹프로젝트를 톰캣 서버에 애플리케이션으로 배포한 항목을 확인할 수 있는 지 확인
답 : server.xml

 

 

 

[애플리케이션 소스 검증하기]

15. github에 저장소를 만든 후 eclipse에서 작성한 프로젝트를 upload하는 과정을 서술하시오.

 

>> 버전관리 도구인 깃 사용법과 깃헙 원격저장소를 생성할 수 있는지, 이클립스와 원격 저장소를 연동해 프로젝트를 공유할 수 있는 지 테스트.


1. github에 계정을 생성하고 원격저장소를 생성한다.

2. 이클립스에서 프로젝트를 생성한다.
3. 이클립스에서 githib 연결한다.
window > perspective 탭에서 Open perspective > Other > git 선택 > clone a git repository 선택 후 github 저장소 URI와 계정 패스워드를 등록한다.
4. 프로젝트에서 우클릭 > Team > share project를 통해 project를 등록 > 프로젝트 변경 내용을 commit and push 를 선택하여 원격 저장소로 업로드한다.

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90
자바기반 앱개발 & 웹서비스 구축 개발자
프로그래밍언어활용

수업이 끝나면서 각 과목 별 시험 쳤던 문제들을 복습 겸 정리해보겠습니다.
이번이 2번째 글이고 관련글은 아래 목록을 확인해주세요.

 

 

애플리케이션테스트 문제

 


 

[기본 문법 활용하기]

1. 다음 중에서 올바른 주석이 아닌 것은?

1)  /** 주석 */          2) /* 주석  */          3) /*주석           4) //주석

 

2. 자바가 지원하는 기초 자료형의 종류를 나열하고 간단하게 설명하시오.

boolean :  1bit 로 TRUE, FALSE 값을 가진다.
char : 2byte 크기로 문자 1개를 저장하는 데이터 타입이다.
byte : 1byte 크기로 정수를 저장하는 데이터 타입이다.
short : 2byte 크기로 정수를 저장하는 데이터 타입이다.
int : 4byte 크기로 정수를 저장하는 데이터 타입이다.
long : 8byte 크기로 정수를 저장하는 데이터 타입이다.
float : 4byte 크기로 실수를 저장하는 데이터 타입이다.
double : 8byte 크기로 수를 저장하는 데이터 타입이다.

 

3. 유효한 자바 식별자가 아닌 것은?   1,2,4,5

1) class
2) #_of_workers
3) countOfLettersInString
4) 1stLevel
5) person#


* 자바 식별자 명명 규칙

- 첫 번째 글자는 문자이거나 '$', '_'이어야 함
- 두번째 이후의 글자는 숫자, 문자, '$', '_'이어야 함
- 자바의 예약어, 상수 값을 표현하는 단어 true, false, null는 식별자로 사용할 수 없음
- 길이 제한 없음
- 공백은 포함할 수 없음

 

4. 다음과 같은 문장이 순차적으로 실행되는 경우, 각각의 문장이 실행된 후의 변수의 값을 구하시오.

int x=10, y=2, z=2;

z = ++x /y;                    1) x       11          y       2           z        5      
x*= y+1;                        2) x       33          y       2           z        5      
z = ++x + y++;               3) x       34          y       3           z       36      

 

5. 다음의 코드를 컴파일할 때, 오류가 나는 이유는?

public class Test{
	public static void main(String[] args) {
		int x;
		System.out.println(x);
		}
}

지역변수 x의 값을 초기화하지 않아서

 

6. 다음 클래스를 컴파일 한 후 실행결과는?

public class Test{
	public static void main(String[] args) {
		int[] a = { 1,2,3,4,5,6 };
		int i = a.length - 1;
		while (i>=0) {
			System.out.print(a[i]);
			i--;
		}
	}
}

654321

 

7. 자바에서 다음 클래스를 컴파일한 후 실행결과는?     3

public class Test{
	public static void main(String[] args) {
		Spring city = "서울";
		Spring country = "";
		switch(city) {
			case "서울" :
			case "부산" : country = "한국";
 			case "북경" : country = "중국";
			case "동경" : country = "일본"; break;
				default : country = "대상없음";
		}
					System.out.println(country);
	}
}

1) 컴파일 에러            2) 한국               3) 일본            4) 대상없음

 

[언어특성 활용하기]

8. 객체를 초기화하는 용도로 사용되는 생성자(Constructor)의 특징으로 잘못된 것은?     3

1)  생성자 이름은 클래스의 이름과 동일하다.
2)  클래스 정의 시 생성자를 만들지 않으면 객체가 생성될 때 컴파일러가 자동으로 만든다.
3)  반환 값(return type)을 갖는다.
4)  객체를 생성할 때 자동으로 호출된다.

생성자는 다음과 같은 new 표현식을 통하여 객체의 생성과 함께 실행된다.  Example ex = new Example();
클래스는 초기화를 위하여 생성자(constructor)라는 특별한 코드 블록을 가질 수 있다. 즉, 생성자는 클래스가 new 표현식에 의해 인스턴스화되어 객체를 생성할 때, 객체의 레퍼런스를 생성하기 전에 객체의 초기화를 위해 사용되는 코드의 블록이다.


생성자는 자바 클래스의 멤버가 아니며, 멤버가 아니므로 상속되지 않는다. 따라서, 오버라이딩의 대상이 될 수도 없다. 또한, 일반적인 메소드 호출방법으로 호출할 수 없다. 생성자는 접근 제한 수식어인 public, protected, private 만을 쓸 수 있으며, abstract, final, native, static, strictfp, synchronized 등의 수식어를 사용할 수 없다.

 

9. 접근 제어자는 클래스와 클래스의 멤버 접근에 대한 접근 정도를 지정할 때 사용한다. 클래스 멤버의 접근지정자 4가지를 나열하라.

public :   공개된 접근 지정자, 모든 클래스에서 접근 가능
protected :   같은 패키지와 상속받은 모든 클래스에서 접근 가능
private :   비공개로 현재 클래스에서만 접근 가능
default :   같은 패키지 내의 모든 클래스에서 접근 가능

 

10.  다음 코드 설명 중 올바른 것은?    2

public class Test {
	public static void exam( ){
		int i = 5;
		int j = 7;
		if(i>20) {
			int k = i+j;
		}
		System.out.println(k);
	}
	public static void main(String[] args) {
		exam();
	}
}

1) 지역변수 k는 디폴트 초기화되고 if문 조건이 만족하지 않으므로 0이 출력된다.
2) System.out.println(k); 부분에서 컴파일 오류가 발생한다.
3) exam()을 호출하기 위해서는 객체 생성을 해야한다.
4) 정상적으로 수행되고 결과는 12가 출력된다.

 

 

11.  다음은 자바 예약어 (keyword)에 대한 설명이다. (ㄱ)과 (ㄴ)에 들어갈 적절한 예약어는?

클래스 접근 지정자(Modifier)로 (ㄱ) 이 명시되면, 다른 클래스들은 해당 클래스를 상속 받을 수 없다. 메소드의 Modifier로 (ㄱ) 이 지정되면 자식 클래스는 그 메소드를 오버라이딩 할 수 없다. (ㄴ) 메소드가 하나 이상 존재하는 클래스는 클래스 선언부에 (ㄴ) 제어자(Modifier)가 선언되어야 한다. (ㄴ) 메소드가 존재하는 클래스를 상속받는 자식 클래스에서는 해당 (ㄴ) 메소드를 구현하거나 해당 클래스의 선언부에 (ㄴ) 제어자(Modifier)가 명시되어야 한다.

(ㄱ) : final
(ㄴ) : abstract

 

 

12. 다음 중 자바 인터페이스에 대한 설명 중 틀린 것은 ?     2

1)  인터페이스는 다중상속의 장점인 다양한 계층구조 형성을 지원한다.
2)  인터페이스는 추상 메서드와 구현부가 있는 메소드를 가질 수 있다.
3)  하나의 클래스는 여러 개의 인터페이스를 구현할 수 있다.
4)  인터페이스는 다른 인터페이스를 상속할 수 있다.

인터페이스는 추상클래스와 final 변수로만 이루어진 클래스이며 일반 클래스가 인터페이스를 구현해주어야 상속 가능.
클래스가 상속을 통해 구현하는데 한계가 있는 경우 자바에서 불가능한 다중상속을 흉내내기 위한 도구이다.

인터페이스 특징은 구현된 메소드는 올 수 없고 추상메소드만 정의할 수 있다. 일반 클래스는 여러 인터페이스를 다중 상속할 수 있다
인터페이스 간의 상속에서는 다중상속이 제공된다. 상속을 받은 일반 클래스는 인터페이스의 추상메서드를 모두 재정의해야한다.

 

 

13. 다음은 예외 처리를 위한 keyword를 설명한 것이다. 적절하지 않은 것은?     4

1)  try :  예외발생 가능성 있는 소스코드 부분이 들어가는 키워드이다.
2)  catch :  예외 처리 코드가 들어가는 키워드이다.
3)  throws : 메소드가 호출된 곳으로 예외를 던질 때 사용하는 키워드이다.
4)  finally : 예외가 발생하지 않으면 실행되지 않는다.

finally는 예외 발생 여부와 별개로 반드시 실행해야 하는 부분이다.

 

 

[라이브러리 활용하기]

14. 다음이 설명하는 특징을 가진 인터페이스는?       2

ㄱ. Key와 Value의 매핑으로 관리된다.
ㄴ. Key는 중복될 수 없다.
ㄷ. Collection 인터페이스를 상속하지는 않는다

1) Set        2)  Map       3) List       4) Iterator

Collection : 목록성 데이터를 처리하는 자료구조를 통칭한다. 자료구조는 어떤 정보를 담는 것을 의미하며 하나의 데이터가 아닌 여러 데이터를 담을 때 사용한다. 배열이 가장 기본적인 자료구조이며, DTO 또한 자료를 담는 하나의 방식이다. Collection 인터페이스는 java.util 패키지에 선언되어 있으며, 여러 개의 객체를 하나의 객체에 담아 처리할 때 공통적으로 사용되는 여러 메소드를 갖고 있다. add(), addAll(), clear(), contains(), equals(), hashCode() , isEmpty(), iterator(), remove(), toArray() 등이 있다.

 

 

15. 다음 코드의 실행 결과가 나타나도록 빈곳에 적당한 코드를 작성하시오. [상속과 오버로딩 이해하기]

class Person{
	String name;
	int age;

	public Person(String name, int age){
		this.name=name;
		this.age=age;
	}
	public void show(){
		System.out.println(name+" "+age);
	}
}

class Student extends Person{
	String major;
	(ㄱ) //생성자 작성
	(ㄴ) //show() 함수 오버라이딩
}

public class Test {
	public static void main(String[] args){
		Person p = new Student("Heycoding", 20, "피아노");
		p.show();
	}
}

 

(ㄱ),  (ㄴ)  

public Student(String name, int age, String major) {
	super(name, age);
	this.major=major;
}
public void show(){
	super show();
	System.out.println(major+" ");
}

 

 

[언어특성 활용하기]
16. java.lang 패키지에 속해 있으며 자바의 최상위 클래스는 무엇인가?
>> object

 

[라이브러리 활용하기]

17. StringBuffer 클래스에 대한 설명 중 잘못된 것은?        2

1) java.lang 패키지에 포함되어 있다.
2) StringBuffer 객체에 저장된 문자열은 변경할 수 없다.
3) StringBuffer의 reverse() 메소드는 실행결과 문자열은 거꾸로 바뀐다.
4) 지정된 문자열로 초기화된 스트링 버퍼를 생성할 수 있다.

* 자바JDK가 제공하는 라이브러리 String 클래스와 StringBuffer 클래스의 특징 비교

스트링 : 변경 불가, 스트링(문자열)을 연결할 때 매시간 새 경우를 만들어서 느리며 많은 메모리 소비, 객체의 equal()메소드 치환하여 2개의 스트링 내용 비교 가능
스트링버퍼 : 객체 생성후 값 변경 가능, 빠르고 적은 메모리 소비, equals()메소드 치환안함. append와 insert를 통해 조작 가능. 객체의 길이는 스트링 길이에 따라 가변적. 

 

 

[기본문법활용하기]

18. 다음은 StringTokenizer 라이브러리 클래스를 사용한 코드이다. (ㄱ)와 (ㄴ)에 맞는 코드를 작성하고 코드 실행 후 결과를 적으시오.

import java.util.StringTokenizer;

public class Example{
	public static void main(String[] args){
		int sum=0;
		StringTokenizer st = new StringTokenizer("a=3, b=5, c=6", ",=");
		while((ㄱ)) {
			String token = (ㄴ);
			System.out.println(token);
			int n = 0;
			try{
				n = Integer.parseInt(token);
			}catch(NumberFormatException e){
				//정수가 아닌 경우 아무것도 하지 않고 그냥 넘어 간다.
			}
			sum += n ;
		}
		System.out.println("합은 "+sum);
	}
}

(ㄱ)  st.hasMoreToken( );
(ㄴ)  st.nextToken( );

 

 


19. 자바의 상속 특징 중에서 틀린 것은?     3


1)  자바에서의 클래스의 다중 상속을 지원하지 않는다.
2)  자바에서의 상속이 횟수에 대한 제한이 없다.
3)  자바에서 모든 클래스의 최상위 슈퍼클래스는 java.lang.System이다.
4)  자바에서 상속을 표현하는 키워드가 extends 이다.

자바에서 모든 클래스의 최상위 슈퍼클래스는 java.lang.Object이다.

 

 

[언어특성활용하기]

20.  객체지향의 특징 3가지는?

>> 캡슐화, 상속, 다형성

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v