728x90
300x250

[이야기] JSP/Servlet의 RestEasy 4.8(Jboss)로 Rest 실험 이야기(한글 미지원)


결론부터 이야기하면, REST 구현에는 성공했다. 하지만, 문제는 한글 문제인데, 인코딩 관련해서 많은 실험을 하였으나 동작하지 않았다.

삽질하려고 하는 사람이 있다면, 정리하는 걸 추천한다.


REST가 쉽사리 활성화되지 않은 이유도 있을 거 같다. 

C#이나 PHP, C++은 되는지 아직 확인은 안 해봤으나 C#은 되지 않을까 싶다.



1. 주제, 실험 환경


자바 JSP/Servlet으로 REST를 구축할 수 있는지 실험하였다.


- Apache Tomcat 9 - 2020년 9월 기준 - 최신

- Maven 3.6 - 2020년 9월 기준 - 최신

- 각종 RESTEasy 4.5.3 - 2020년 9월 기준 - 최신 (pom 셋팅)......



2. 내용 - 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>


  <groupId>com.restmaven</groupId>

  <artifactId>restWeb</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>


  <name>restWeb Maven Webapp</name>

  <!-- FIXME change it to the project's website -->

  <url>http://localhost</url>


  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven.compiler.source>1.7</maven.compiler.source>

    <maven.compiler.target>1.7</maven.compiler.target>

  </properties>


  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.11</version>

      <scope>test</scope>

    </dependency>

    

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->

<dependency>

    <groupId>javax.servlet</groupId>

    <artifactId>javax.servlet-api</artifactId>

    <version>4.0.1</version>

    <scope>provided</scope>

</dependency>

       

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.11.2</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-core</artifactId>

    <version>2.11.2</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-annotations</artifactId>

    <version>2.11.2</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-core -->

<dependency>

    <groupId>org.jboss.resteasy</groupId>

    <artifactId>resteasy-core</artifactId>

    <version>4.5.8.Final</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxb-provider -->

<dependency>

    <groupId>org.jboss.resteasy</groupId>

    <artifactId>resteasy-jaxb-provider</artifactId>

    <version>4.5.8.Final</version>

</dependency>


<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jsapi -->

<dependency>

    <groupId>org.jboss.resteasy</groupId>

    <artifactId>resteasy-jsapi</artifactId>

    <version>4.5.8.Final</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jackson2-provider -->

<dependency>

    <groupId>org.jboss.resteasy</groupId>

    <artifactId>resteasy-jackson2-provider</artifactId>

    <version>4.5.8.Final</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-multipart-provider -->

<dependency>

    <groupId>org.jboss.resteasy</groupId>

    <artifactId>resteasy-multipart-provider</artifactId>

    <version>4.5.8.Final</version>

</dependency>

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.8.0</version>

</dependency>

  

  </dependencies>

 


  <build>

    <finalName>restWeb</finalName>

    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->

      <plugins>

        <plugin>

          <artifactId>maven-clean-plugin</artifactId>

          <version>3.1.0</version>

        </plugin>

        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->

        <plugin>

          <artifactId>maven-resources-plugin</artifactId>

          <version>3.0.2</version>

        </plugin>

        <plugin>

          <artifactId>maven-compiler-plugin</artifactId>

          <version>3.8.0</version>

        </plugin>

        <plugin>

          <artifactId>maven-surefire-plugin</artifactId>

          <version>2.22.1</version>

        </plugin>

        <plugin>

          <artifactId>maven-war-plugin</artifactId>

          <version>3.2.2</version>

        </plugin>

        <plugin>

          <artifactId>maven-install-plugin</artifactId>

          <version>2.5.2</version>

        </plugin>

        <plugin>

          <artifactId>maven-deploy-plugin</artifactId>

          <version>2.8.2</version>

        </plugin>

      </plugins>

    </pluginManagement>

  </build>

</project>



파일명: pom.xml



3. 내용 - web.xml 설정 사항


<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" 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 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

 

  <display-name>Archetype Created Web Application</display-name>

  

  <context-param>

  <param-name>resteasy.resources</param-name>

  <param-value>com.example.restweb.resources.MyResources</param-value>

  </context-param>

  <context-param>

  <param-name>resteasy.servlet.mapping.prefix</param-name>

  <param-value>/rest</param-value>

  </context-param>


  <listener>

  <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>

  </listener>


  <servlet>

  <servlet-name>Resteasy JSAPI</servlet-name>

<servlet-class>org.jboss.resteasy.jsapi.JSAPIServlet</servlet-class>

</servlet>

  <servlet-mapping>

  <servlet-name>Resteasy JSAPI</servlet-name>

  <url-pattern>/rest-js</url-pattern>

  </servlet-mapping>


  <servlet>

  <servlet-name>Resteasy</servlet-name>

  <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>Resteasy</servlet-name>

  <url-pattern>/rest/*</url-pattern>

  </servlet-mapping>

 

  <servlet>

  <servlet-name>HomeServlet</servlet-name>

  <servlet-class>com.example.restweb.controller.HomeServlet</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>HomeServlet</servlet-name>

  <url-pattern>/HomeServlet</url-pattern>

  </servlet-mapping>

  

</web-app>



파일명: web.xml



4. 내용 - 기본 컨트롤러 셋팅하기


RestEasy의 사용자 구현에서는 핵심이라고 보면 된다.

크게 사용방법에서는 어려운 건 아니다.


난해할 수 있는 주제가 있는데, String 등으로 바로 반환이 안 되는지.

고민해볼 수 있는 문제가 있다.


= "안 된다. 미지원이다."


Response로 무조건 return 반환을 해줘야 한다. 

(Spring Framework 5 - REST 공부하다가 이거 하라고 하면 납득이 안 될 수 있는 부분이 많다.)


package com.example.restweb.resources;


import com.example.restweb.model.FileInfo;


import javax.ws.rs.Consumes;

import javax.ws.rs.Encoded;

import javax.ws.rs.FormParam;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.QueryParam;

import javax.ws.rs.core.Context;

import javax.ws.rs.core.MediaType;

import javax.ws.rs.core.Response;

import javax.ws.rs.core.UriInfo;


import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;


@Path("/api")

public class MyResources

{

// Index

@GET

@Path("")

    @Produces("application/json")

public Response get()

{

StringBuffer buf = new StringBuffer();

buf.append("ok");

return Response.status(200).entity(buf).build();

}


    @GET

    @Path("users/{id}")

    @Produces("application/json")

    public Response getUserById(@PathParam("id") Integer id)

    {

        User user = new User();

        user.setId(id);

        user.setFirstName("Lokesh");

        user.setLastName("Gupta");

        

        return Response.status(200).entity(user).build();

    }

    

    @Path("foo/{param}-{other}")

@PUT

    @Produces("application/json")

public Response putFooParam(@PathParam("param") String param,

  @PathParam("other") String other)

{

StringBuffer buf = new StringBuffer();

buf.append("param").append("=").append(param).append(";");

buf.append("other").append("=").append(other).append(";");

return Response.status(200).entity(buf).build();

}

    

@Path("form")

@POST

    @Produces("application/json")

public String postForm(@FormParam("id") String a,

   @FormParam("passwd") String b){

return a +"/" +b;

}


@Path("lookup")

@GET

    @Produces("application/json")

public Response lookup(@QueryParam("id") String id,

@Context UriInfo uriInfo)

{


StringBuffer buf = new StringBuffer();

buf.append("param").append("=").append(id).append(";");

return Response.status(200).entity(buf).build();

}


    @POST

    @Path("/upload-file")

    @Consumes(MediaType.MULTIPART_FORM_DATA)

    public Response uploadFile(@MultipartForm FileInfo info) throws Exception {

   

    String fileName = info.getFileName();

   

    // RESTEasy는 한글 자체가 안됨.

   

    /*

    form.setFileName(filename);

   

    System.out.println("파일명1:" + form.getFileName());

   

        String fileName = form.getFileName() == null ? "Unknown" : form.getFileName() ;

        String completeFilePath = "c:/temp2/" + fileName;

        try

        {

            //Save the file

            File file = new File(completeFilePath);

              

            if (!file.exists()) 

            {

                file.createNewFile();

            }

      

            FileOutputStream fos = new FileOutputStream(file);

      

            fos.write(form.getFileData());

            fos.flush();

            fos.close();

        } 

        catch (IOException e)

        {

            e.printStackTrace();

        }

        //Build a response to return

        */

   

        return Response.status(200)

            .entity("uploadFile is called, Uploaded file name : " + fileName).build();

        

   

    }

    

    

}


파일명: MyResources.java



5. 결과


실험1)

-> 문자셋 찾기 실험(UTF-8, Euc-kr, us-ascil, windows-1251, ISO-8851-9? 등)

    (반복문으로 해당 문자인지 찾는 작업을 하였음.)

(실패)


실험2)

-> <form 태그 accept- utf-8> 가능하도록 설정

(실패)


실험3)

-> new String (originalText.getBytes("ISO-8851-9), "UTF-8") 등 변환 작업

(실패)

.......

실험4)

-> public response 함수명(@Context ServletRequest req......)에 req.setCharacterEncoding 설정

(실패)



(다수의 방법을 적용하였음.)


결과는 RESTEasy 프로젝트에서 한글 자체를 해결해줘야 한다. 그렇지 않으면 어렵다.

이 프로그램은 영어로 글을 작성한다고 했을 때는 동작한다.


단순한 영어나 숫자 형태로 전송 작업을 시도하고 싶다면, 해봐도 무방하다. 한글 등은 기대 안 하는 게 좋을 듯 싶다.


RESTEasy 이외에 흥미로운 발견을 한 부분도 있다.

Servlet 생성할 때 셋팅화면에 자세히 보면, doPut, doDelete, doGet, doPost 기능이 있다.

문제는 패턴 등을 잡을 때 한계가 생긴다. (힘들고 무척 어렵다는 이야기이다.)


이 실험은 그런 부분은 해소하였다.




[첨부(Attachments)]

restEasy-한글미지원(Unsupported_Korean_Language).zip

(Spring Tool-Suite 4.4에서 작성함.)





* 참고자료(References)


1. RESTEasy JAX-RS, https://docs.jboss.org/resteasy/docs/4.5.8.Final/userguide/html/, Accessed by 2020-09-29, Last Modified 2020-09-23.

   = (RESTEasy 기술 정보가 해외, 국내에 많이 부족해서 공식 메뉴얼을 참고할 수 밖에 없음)


2. Chapter 3. Installation/Configuration, / 3.3. Deploying to other servlet containers, https://docs.jboss.org/resteasy/docs/4.5.8.Final/userguide/html/Installation_Configuration.html


3. RESTEasy JSON Example with Jackson, https://howtodoinjava.com/resteasy/resteasy-jackson-json-example/, Accessed by 2020-09-29, Last Modified 2013.

   = (RESTEasy에서의 다중 업로드 기능에 대해서는 잘 소개하고 있다.)


4. /resteasy/test/smoke/MyResource.java - Github, https://github.com/resteasy/resteasy-examples/blob/master/jsapi-servlet-test/src/main/java/org/jboss/resteasy/test/smoke/MyResource.java, Accessed by 2020-09-29, Last Modified 2016-08-05.

   = 조금 된 소스코드이나 RESTEasy를 쉽게 빠르게 구축하는 방법이 적혀져 있다.

   = 문제는 저 코드대로 전부 따라해보면, 안 된다. 태스트를 수 차례 각종 URL을 넣어봐서 되는 코드는 살리고 참고를 많이 하였다.


5. JSON Example With RESTEasy + Jackson, https://examples.javacodegeeks.com/enterprise-java/rest/resteasy/json-example-with-resteasy-jackson/, Accessed by 2020-09-29, Last Modified 2013-12-09

   = 구축 원리를 차근차근 화면 그림 위주로 소개하고 있다.


6. RESTEasy File Upload – Html Form Example, https://howtodoinjava.com/resteasy/jax-rs-resteasy-file-upload-html-form-example/, Accessed by 2020-09-29, Last Modified 2013.

   = RESTEasy 2.3 기반으로 작성된 것이라서 다소 일부분만 참고하였다. 동작이 안 되는 코드들도 많다.


7. RESTEasy JAX-RS 4.5.8.Final API, https://docs.jboss.org/resteasy/docs/4.5.8.Final/javadocs/, Accessed by 2020-09-29, Last Modified 2020-09.

   = JAVA API 메뉴얼처럼 RestEasy도 API 메뉴얼이 있다. 변화가 다소 있었다. 2.3버전의 메뉴얼과 현재 버전의 기능 변화가 많이 있었다.

반응형
728x90
300x250

[이야기] Maven, Oracle 19, Hibernate 5.4 - ORM 구현 및 동작하나요?


인터넷 글 등을 참고해보면, 대다수 검색되는 내용이 "Spring + Maven + Hibernate + MySQL" 조합의 글들이 굉장히 많이 나온다.

해외 사이트를 찾아서 참고해보면, "Maven + Hibernate + MySQL" 조합도 종종 나온다.

StackOverflow에 Oracle 19g와 Hibernate를 사용할 때 Dialect을 어떤 것을 사용해야 하는지 검색을 해보았다.

Oracle 12버전으로 하면 된다고 해서 시도하였으나 동작하지 않았다.



* 오라클로 작업을 하고자 하는 인원이 있다면, 참고하면 좋겠다.


* 결론: 수 차례 실험 결과로는 동작하지 않는다. (2020-09-20일 기준)



- 오라클 데이터베이스 자체가 전혀 안 된다는 이야기는 아니고, Dialect 등이 엄격하게 버전을 인식하는 것으로 추측해본다.
  (실험을 해보면 Oracle 11, Oracle 12로 시도했을 때는 될 수도 있다는 이야기를 하고 싶었다.)
- 물론 시간적인 여력이 된다면, 연재해보겠다. 

  (오라클 제거하고, 컴퓨터 포멧이나 VirtualBox 등 각종 방법으로 실험을 한다고 했을 때 시간이 소요되는 작업이다. 결코 쉽지않은 작업들이다.)




1. 작업화면


수 차례 실험하였으나 동작하지 않는다.



그림 1. hibernate Maven 프로젝트




2. 실험 환경


* 컴퓨터 사양: intel i5 4세대 이상, SSD 256GB 이상, RAM 16GB 이상

* 시도 횟수: 4번(hibernate 초기 로드시간이 상당히 오래 걸림.) - 코드 작성 / 재작업 등 각종 숨은 디버깅 작업이 있었음.

              데이터베이스 테이블도 구현하였고 각종 작업을 하였음.


* IDE: Spring-tool-suite-4-4.7.2 Release(Eclipse)

     Jboss - hibernate만 설치


* POM:

      java-servlet

      hibernate-em(entity-manager)

      oracle-19g(ojdbc8)


* Database: 

      Oracle Databases 19g


* Web Server:

      Apache Tomcat 9


* 환경설정 파일 생성: Jboss - hibernate로 자동 생성하였음. (src/main/resources 폴더 내에 hibernate.cfg.xml 설치함)


* 프로젝트


   - [첨부(Attachments)]

hibernateMaven.zip


특이한 점: 초기 웹서버를 리셋하고, URL주소를 입력하여 DB에 접근하면 무한 반응으로 대기상태에 한참 있다가 hibernate 동작에서 

한참 대기 후에 결과가 나옴.


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

 <session-factory name="">

  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>

  <property name="hibernate.connection.username">사용자계정</property>

  <property name="hibernate.connection.password">비밀번호</property>

  <property name="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</property>

  <property name="hibernate.show_sql">true</property>

  <property name="hibernate.use_sql_comments">true</property>

  <property name="hibernate.format_sql">true</property>

  <mapping class="com.hibernateMaven.web.model.EmpTable"/>

 </session-factory>

</hibernate-configuration>


* 파일명: hibernate.cfg.xml

* 비고: Dialect이 지원될 때까지는 기다려야 할 것으로 보인다. 이전 Dialect으로 연결 시도를 해도 된다는 Stackoverflow 글도 참고하였으나 확인되진 않았다.

        (2020-09-21)



그림 2. JBoss Tools 4.16.0. Final



그림 3. Maven Project 생성 모습의 예



그림 4. 프로젝트 오른쪽 버튼 -> New -> Other....



그림 5. Hibernate 환경설정 파일 - 마법사 (JBoss 기반)



그림 6. Hibernate 환경설정 파일 - 마법사 (JBoss 기반)




그림 7. Hibernate 환경설정 파일 - 마법사 (JBoss 기반)



그림 8. Hibernate 환경설정 파일 생성된 모습


JBoss - Hibernate 플러그인을 설치하면, GUI화면으로도 작업할 수 있다.



그림 9. Hibernate 환경설정(GUI)으로 Mapping 시도하는 모습


실험하면서 동작하였으면, 좋은 글 하나 나왔을 탠데 아쉽다는 조금 생각이 든다.


현재 시중 블로그에 제대로 동작하는 Hibernate + Maven + Oracle 18 이상의 프로젝트는 없다고 보면 정확할 거 같다.

OpenTutorial 이런 강의 사이트 동영상도 참고해보기도 하고, 많은 시간을 투자하였다.





3. 결론(Conclusion)


안 될 때는 과감하게 정리해야 한다. 시도해볼만한 삽질이라면, 해야 하는게 맞지만, 오래 시도하기에는 애매한 작업들이 있다.


Hibernate보다는 MyBatis가 좋다고 보는게, 직관적으로 SQL 문법을 자유롭게 사용할 수 있다는 게 큰 장점이라고 본다.

ORM(객체-관계-맵핑)이라는 주제도 물론 중요하지만, 그거 필요하면 코드로 그냥 구현해서 사용하는 게 더 이득이고 낫다고 주장해본다.


엔터프라이즈 환경에 적합하다고 적은 교과서도 시중에 있긴 있는데, 꼭 그렇진 않은 거 같다고 본다.

서버 튜닝으로 막아도 무방하고, MySQL 이런 것도 예를 들면 튜닝이나 Cluster 등 다양한 방법론을 잘 적용하면 엔터프라이즈에서도 사용할 수 있다고 본다.


SQL 문법이 크게 어려운 것이 아니니깐, ORM은 여전히 시기상조라고 주장해본다.

더 복잡해지고 개발환경이나 생산성에서 미흡한 점이 여전히 남아 있다.

반응형
728x90
300x250

[진로(Career)] 미래 세상과 직업 세계

 

한마디로 정의하면, 불확실성의 세계라고 볼 수 있다.

찾아보면 도움이 되는 몇 가지 키워드로 정리하겠다.

 

1. 4차 산업혁명(Fourth Industrial Revolution)

4차 산업혁명은 ▷1784년 영국에서 시작된 증기기관과 기계화로 대표되는 1차 산업혁명 ▷1870년 전기를 이용한 대량생산이 본격화된 2차 산업혁명 ▷1969년 인터넷이 이끈 컴퓨터 정보화 및 자동화 생산시스템이 주도한 3차 산업혁명에 이어 ▷로봇이나 인공지능(AI)을 통해 실제와 가상이 통합돼 사물을 자동적·지능적으로 제어할 수 있는 가상 물리 시스템의 구축이 기대되는 산업상의 변화를 일컫는다.
Link: https://terms.naver.com/entry.nhn?docId=3377297&cid=43667&categoryId=43667


2. 긱 이코노미(Gig Economic)

기업들이 정규직 보다 필요에 따라 계약직 혹은 임시직으로 사람을 고용하는 경향이 커지는 경제상황을 일컫는 용어.
Link: https://terms.naver.com/entry.nhn?docId=3583919&cid=40942&categoryId=31846

 

3. 자율 주행(Automatic Driving)

운전자가 직접 운전하지 않고 차량이 스스로 도로에서 달리게 하는 일.
Link: https://terms.naver.com/entry.nhn?docId=2760959&cid=50307&categoryId=50307


4. 정맥으로 물건을 결제하는 무인 편의점 (동영상 백과)


5. 아마존 고(Amazon Go)

 

요약세계 최초의 무인 매장으로, 미국 전자상거래 기업 아마존이 운영함. 인공지능, 머신러닝, 컴퓨터 비전 등의 첨단기술이 활용되며, 소비자가 스마트폰에 앱을 다운로드 하고 매장에 들어가 상품을 고르기만 하면 연결된 신용카드로 비용이 청구됨.
Link: https://terms.naver.com/entry.nhn?docId=3557879&cid=43667&categoryId=43667

 

6. 드론(Drone)

 

드론은 무선전파로 조종할 수 있는 무인 항공기다. 카메라, 센서, 통신시스템 등이 탑재돼 있으며 25g부터 1200kg까지 무게와 크기도 다양하다. 드론은 군사용도로 처음 생겨났지만 최근엔 고공 촬영과 배달 등으로 확대됐다. 이뿐 아니다. 값싼 키덜트 제품으로 재탄생돼 개인도 부담없이 드론을 구매하는 시대를 맞이했다. 농약을 살포하거나, 공기질을 측정하는 등 다방면에 활용되고 있다.

Link: https://terms.naver.com/entry.nhn?docId=3579107&cid=59088&categoryId=59096

 

반응형
728x90
300x250
[진로(Career)] 오프라인 대학 vs 온라인 대학

 

오프라인 대학과 온라인 대학에 대해서 정리해보았다.
구체적으로 무엇이 장단점인지 국내(Local) 기준으로 적어보았다.

 

 

오프라인 대학

온라인 대학

등록금

 비싸다. 100 ~ 800만원 / 1학기

 30만원~130만원 내외(1학기)

 지각 가능

여부

 가능함.

 단, 택시비가 엄청 많이 든다. 비용은 1~2만원 예상

 해당없음.

식사

 해야 함. 한끼 (3,500~4,500원)

 필요없음.

교재 주문

 1권당 3~4만원 x 7과목 = 21만원 예상

 사이버 대학에서 제공해주는 교제

 (1만원~3만원 내외 x 7 = 14만원)

실습

 * 과목 마다 다름.

    (학부생 기준: 140학점 기준 4~10과목이면 많이 하는 것)

 -> 실습장에서 실습을 100%로 하는 것이 아니라

     개인 노트북에 토렌트로 예를 들면 eclipse 등을 설치해서

     실습을 하는 것.

 * 원격 실습장(사이버랩),
   최근에는 개방형 실습 랩이 많음.
   (기계공작소, 3D프린트 창작소, 3D CNC 공작소 등)

비고

 * 특정 자격증 제한이 있는 학과(의예과, 간호학과, 화학과)

 * 방송대에 간호학과 설치되어 있음. 
   (간호사 자격증이 있는 사람에 한해서 운영됨.

    간호사 자격증 취득 트랙은 운영하진 않음.)

 

 

반응형
728x90
300x250

[이야기(Story)] 웹 어플리케이션과 웹 프로그래밍([Story] Web Applications and Web Programming)

 

'웹 어플리케이션'은 웹을 기반으로 실행되는 어플리케이션을 의미한다.
('Web application' means an application that runs on the web.)

 

(그림 1). 웹 브라우저에 서비스를 제공하기 위해 필요로 하는 구성 요소들
(Figure 1). Components needed to provide services to a web browser)

 

그림 1에 표시한 구성 요소들은 웹 어플리케이션을 구축하는데 있어 기본이 되는 것들로서, 각 구성요소는 [표1]과 같은 역할을 수행하게 된다.

The components shown in Figure 1 are the basics for building web applications. Each component plays the role shown in [Table 1].

 

 구성 요소(Component)

역할(Roles)

 주요 제품들(Main products)

웹 서버

(Web server)

웹 브라우저의 요청을 받아서 알맞은 결과를 웹 브라우저에 전송한다.

만약 프로그램 처리가 필요하다면 어플리케이션 서버를 사용하거나 프로그램을 직접 호출하여 결과를 생성한다.

주로 정적인 HTML, 이미지, CSS, 자바 스크립트 파일을 웹 브라우저에 제공할 때 웹 서버를 사용한다. 

 

It accepts a request from a web browser and sends the appropriate result to the web browser.

If you need to process the program, use the application server or call the program directly to generate the result.

A web server is often used to serve static HTML, image, CSS, and JavaScript files to web browsers.

아파치(Apache), nginx 등 

어플리케이션 서버

(Application server)

게시글 목록, 로그인 처리와 같은 기능을 실행(처리)하고, 그 결과를 응답으로 웹 서버에 전달한다.

It executes (processes) functions such as post list and login processing, and sends the result to the web server in response.

PHP, 톰캣(Tomcat), JBoss 등 

데이터베이스

(Database)

웹 애플리케이션이 필요로 하는 데이터를 저장한다. 예를 들어, 회원 정보, 게시판 글 데이터 등을 저장한다.

Store the data required by the web application.

For example, it stores member information and bulletin board post data.

 오라클(Oracle), MySQL(MariaDB), MSSQL 등

웹 브라우저

(Web browser)

웹 서버에 서비스 실행을 요청하며, 웹 서버의 처리 결과를 사용자에게 보여준다.

Requests the service to the web server and shows the processing result of the web server to the user.

 인터넷 익스플로러(IE), 구글 크롬(Chrome), 파이어폭스(Firefox) 등

 

어플리케이션 서버도 웹 서버와 마찬가지로 정적인 HTML이나 CSS, 이미지 등을 제공할 수 있는데, 웹 서버에서 정적인 HTML과 이미지 등을 제공하고 어플리케이션 서버가 프로그램(기능)을 제공하는 이유는 성능 때문이다. 일반적으로 아파치와 같은 웹 서버는 정적인 HTML과 CSS를 제공하는데 초점이 맞춰져 있고, 톰캣이나 웹로직과 같은 어플리케이션 서버는 JSP, 서블릿과 같은 프로그램을 실행하여 결과를 제공하는데 초점이 맞춰져 있다.

(Like a web server, an application server can provide static HTML, CSS, and images.

The reason why a web server provides static HTML and images, and an application server provides a program (function) is due to performance.

 In general, web servers like Apache are focused on providing static HTML and CSS, and application servers like Tomcat and Web Logic are focused on running programs such as JSPs and servlets to provide results.)

 

[첨부(Attachment)]

webApplication.odp

 

반응형
728x90
300x250

[이야기(Story)] 티맥스 OS 사용후기 - 이클립스(Eclipse), APT, 인터넷 뱅킹


티맥스 OS(Tmax OS)를 직접 사용해보았습니다.

개발자 관점으로 자주 사용할 수 있는 프로그램을 대상으로 시연하였습니다.



1. Eclipse(2019-11-12)


이클립스 사용에 관한 것입니다.







Java가 설치되지 않았다고 알리는 메시지입니다.

처음 순수한 설치를 하면 자바 자체가 깔려있지 않습니다.



데비안, 우분투 리눅스에서 자주 사용했던 apt-get install 명령어는 지원은 합니다.

소스 주소 등을 알아내고 배포판 계열을 맞춰내면 가능할지는 모르겠습니다.(태스트 해보진 않았음.)




2. OpenJDK 설치하기


https://openjdk.java.net 에서 수동으로 설치할 수 있는 파일을 내려받을 수 있습니다.

설치 방법은 시중에 돌아다니는 "우분투 18.04, 데비안 10"과 동일하게 진행할 수 있습니다.



tar xvfz openjdk.tar.gz

.......

sudo mkdir /usr/local/java

sudo mv /jdk13 /usr/local/java


vim /etc/profile.d/jdk13


export JAVA_HOME ...........

export PATH=............


:wq


source /etc/profile


java -version


이런 형태로 진행하여 설치할 수 있습니다.














3. Eclipse 설치 창 동작 시켜보기(2019-11-12)


동작한다고 보면 됩니다.

다만, 최근 출시된 eclipse 버전이 오류가 많아서 튕길 수 있습니다.



















4. APT 업데이트


debian.org 소스와, tmaxos.com 소스 경로가 나옵니다.





반응형
728x90
300x250
[이야기(Story)] 소스코드 라인 계산 프로젝트 - CLOC

 

소스코드 라인 계산을 해주는 프로젝트입니다.

http://cloc.sourceforge.net/

 


1. 프로젝트 소개

 

그림 1) cloc 소스포지 웹 사이트

 

 

그림 2) 라이선스와 안정화된 버전에 대한 설명

 

참고로 CLOC 프로젝트는 GNU v2 라이선스를 적용받습니다.

https://sourceforge.net/projects/cloc/files/cloc/v1.64/

 


2. 첨부(Attachment)

 

cloc-1.64.zip

cloc-1.64.pl

cloc-1.64.tar.gz

README.txt

release-1_64.txt

 


3. 사용방법(Guide)

 

 

 

 


4. 참고자료(Reference)

 

1. CLOC -- Count Lines of Code, Accessed by 2019-10-08, Last Modified 2015, http://cloc.sourceforge.net/

2. cloc - Browse /cloc/v1.64 at SourceForge.net, Accessed by 2019-10-08, Last Modified 2015, https://sourceforge.net/projects/cloc/files/cloc/v1.64/

반응형
728x90
300x250

[이야기(Story)] 경영 - 3정 5S

 

3정 5S에 대해서 직관적으로 쉽게 소개해봅니다.

 

 

반응형

+ Recent posts