728x90

필요한 유틸리티 기능은 무엇이 있을까?


프로젝트를 진행하다보면 기존의 코드를 사용하던 처음 부터 구축하여 진행을 하던간에 공통 유틸리티 성의 코드를 가져다 쓰거나 만들어서 쓰는 일들이 많은 것 같다.

대부분의 요구사항에는 파일이나 엑셀, 암호화 등의 기능을 요구하는 곳이 많기도 하고 접근에 관한 이력을 DB에 저장해야하는 경우도 많았다.

  • 파일 유틸
  • 암호화 유틸
  • 엑셀 유틸
  • request 유틸
  • session 유틸

등이 기본적으로 필요했고, 많이 쓰였다.

더 많은 프로젝트를 접해 보면 더 좋겠지만, 위와 관련된 코드들을 구현해 보면 좋겠다는 생각이 들었다.

유틸리티 class


보통 이전의 유틸리티 class들을 static으로 불러와 많이 사용하였다. 요즘은 new 또는 @Component로 DI 를 통해 사용한다고 하는데 그 기준이 어떻게 되는지는 모르겠다.

아마도 객체 상태에 대한 이해와 java에서 사용되는 static에 대한 이해, 클래스 메소드가 어디서 무엇을 위해 사용되는지 이해하면 좋을 듯 싶었다.

static은 클래스 단위로 관리되어 메모리 사용량을 줄이고, 객체 생성 오버헤드 없이 접근할 수 있다. 라는 설명을 본적이 있는데, static 멤버 변수를 전역으로 공유 되기 때문에 특정 시점에서의 생성된 객체에 특정 멤버 변수의 값을 변화 시켜야 하는 작업이라면 static 보다는 instance의 유틸을 만들어 보는것이 좋지 않을까 싶다.

728x90
728x90

1. Dependency 추가

// build.gradle

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '3.2.5'
runtimeOnly group: 'com.h2database', name: 'h2', version: '2.2.224'
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.30'
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.30'

2.property 추가

// application.yml
spring:
  application:
    name: hiioAdminServer
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:P:\hiio420\h2DB\test.db
    username: sa
    password:
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create-drop       
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
        format_sql: true
        show_sql: true

3. TestEntity 생성

package com.hiio.adminserver;


import jakarta.persistence.*;
import lombok.*;

@Entity
@Table(name = "TEST")
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TestEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Builder
    public TestEntity(Long id) {
        this.id = id;
    }
}

4. Repository 생성

package com.hiio.adminserver;

import org.springframework.data.jpa.repository.JpaRepository;

public interface TestRepository extends JpaRepository<TestEntity,Long> {
}

5. Test 코드 작성

package com.hiio.adminserver;


import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@SpringBootTest
@Slf4j
class HiioAdminServerSpringApplicationTests {

    @Autowired
    private TestRepository repo;
    @Test
    @DisplayName("test")
    @Transactional
    void contextLoads() {
        log.info(repo.toString());
        TestEntity t = TestEntity.builder().name("test1").build();
        repo.save(t);
        List<TestEntity> tList = repo.findAll();
        for (TestEntity item : tList){
            log.info(item.getId().toString());
            log.info(item.getName());
        }

    }

}

...

2024-05-07T15:48:25.291+09:00  INFO 37480 --- [hiioAdminServer] [    Test worker] .a.HiioAdminServerSpringApplicationTests : 1
2024-05-07T15:48:25.292+09:00  INFO 37480 --- [hiioAdminServer] [    Test worker] .a.HiioAdminServerSpringApplicationTests : test1
728x90
728x90

혼자 진행하는 프로젝트의 묘미는 그냥 내마음 대로 할 수 있다는게 아닐까?

FastAPI로 만들던 개인 프로젝트, 회사에서 다른 프로젝트를 FastAPI로 만들다 보니 흥미가 떨어 졌다. 

그래서 한번도 사용해 보지 않았던!

Spring Boot도 배울겸 JPA도 써볼 겸 관리자 페이지 Rest API 서버를 Spring boot로 처음부터 만들면 좋겠다 싶어서 시작해 본다.

 

IDE는 IntelliJ를 사용한다.

JDK 17 버전으로 spring boot는 3 버전을 사용한다.

 

IntelliJ의 New Project에는 Spring Initializr Generators가 있기 때문에 이를 통해서 프로젝트를 생성해보자.

기본적인 프로젝트 정보를 기입한 후에 Next!

 

 

아직은 아무런 Dependency들을 추가 하지 않고 Create를 한다.

 

 

프로젝트 파일들이 생성 됩니다.

 

Shift + F10으로 실행시켜봅니다.

프로젝트가 실행 되지만 바로 끝나버립니다.

 

Stackoverflow https://stackoverflow.com/questions/32758996/intellij-process-finished-with-exit-code-0-when-spring-boot-run

 

IntelliJ Process finished with exit code 0 when spring-boot run

I have a problem when starting spring-boot appication from IntelliJ-Idea. I don't have this problem when running application through terminal. :: Spring Boot :: (v1.2.1.RELEASE) 2015-09-24...

stackoverflow.com

에서는 boot-start-web을 추가하고, controller를 하나 만들어 보라고 합니다.

 

build.gradle에 dependency를 추가합니다.

 

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	implementation 'org.springframework.boot:spring-boot-starter-web'
}

 

그리고 MainController.java 파일을 만들어 GetMapping으로 메소드를 하나 추가해 줍니다.

 

package com.hiio.adminserver.main;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

    @GetMapping("/")
    public String index() {
        return "Hello World";
    }
}

 

이후 다시 Run 해보면

 

 

localhost:8080 으로 서버가 열리게 됩니다.

 

위 주소로 접속하게 되면

 

Hello World 문구를 볼수 있습니다.

728x90

+ Recent posts