일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- MySQL
- log4j2
- current_date
- update
- Spring Batch
- mysql 5.5
- Express
- git
- 정규표현식
- 퀵소트
- npm
- Effective Java
- log_bin
- Regular expression
- Effective Java 3/e
- spring cloud
- nodejs
- Node
- REACTJS
- spring
- Chunk
- Webpack
- expire_logs_days
- java
- upgrade
- REACT
- migration
- eslint
- JavaScript
- regex
- Today
- Total
목록Technical/Spring (16)
내 세상
Version 정보org.springframework.boot 3.4.2org.jetbrains.kotlin.jvm 1.9.25org.jetbrains.kotlin.plugin.spring 1.9.25 implementation("org.springframework.boot:spring-boot-starter-data-r2dbc") implementation("dev.miku:r2dbc-mysql:0.8.2.RELEASE") implementation("org.springframework.boot:spring-boot-starter-webflux") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("io..
@Configuration("Constants") @PropertySource(value = { "classpath:/application-${spring.profiles.active:testssgg}.properties" }) spring.profiles.active가 없을 때, testssg로 대체됨. 1) -Dspring.profiles.active=dev application-dev.properties 로드 2) -Dspring.profiles.active=prod application-prod.properties 로드 3) -Dspring.profiles.active가 없을 때 application-testssg.properties 로드
private HttpHeaders makeHttpHeaders(String filename) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\"" + filename + "\";"); headers.set(HttpHeaders.TRANSFER_ENCODING, "binary"); return headers; } private ResponseEntity downloadFile(HttpServletRequest request, Map map, String..
Base62 - 문자나 일반 데이터를 Base 62 색인표를 기반으로 인코딩하는 방식. - Base64에서 62번째(+), 63번째(/) 기호는 url에서 parameter로 사용할 수 없기 때문에, 제외한 것. - cf) Base64 Url Safe 버전이 있음. ( +(plus) 기호 → -(minus)기호, /(divide) 기호 → _(underline) 기호 ) 랜덤성을 위해 base62 문자열 위치 변경 AS-IS: abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ TO-BE: aZbYc0XdWeV1fUgTh2SiRjQ3kPlOm4NnMoL5pKqJr6IsHtG7uFvEw8DxCyB9zA @Service public class Ba..
public void deleteFolder(String path) { File folder = new File(path); try { if (folder.exists()) { File[] folder_list = folder.listFiles(); for (int i = 0; i < folder_list.length; i++) { if (folder_list[i].isFile()) { folder_list[i].delete(); } else { deleteFolder(folder_list[i].getPath()); } folder_list[i].delete(); } folder.delete(); } } catch (Exception e) { e.getStackTrace(); } }
@PostConstruct - Dependency Injection가 이루어진 후 Initialize를 수행하는 Method. - 해당 Method는 service를 수행하기 전에 발생한다. 전역 변수로 사용하기 위한 Class Source Code - @Bean Annotation과 @Component Annotation - Spring(IOC) Container에 Bean을 등록하도록 하는 metadata를 기입하는 annotation - @Bean - 개발자가 직접 제어 불가능한 외부 라이브러리 등을 Bean으로 만들때 사용함. - 개발자가 생성한 Class에 Bean 선언은 불가능하다. 컴파일 에러 발생함. - 반환하는 객체를 Bean으로 만드는 것 - @Component - 클래스를 Spring..
CORS : Cross Origin Resource Sharing TBD....................
아래의 SQL을 Mybatis에서 동작하면 error가 발생한다. SELECT TIMEDIFF(start_time,end_time)) as timegap FROM test_log; 아래와 같은 error가 발생하게 된다. java.sql.SQLException: Error - java.sql.SQLException: Illegal hour value '26' for java.sql.Time type in value '26:00:01 해당 에러는 time 값을 연산했을 때, hh:mm:ss 를 기준으로 각 단위가 hh는 0~24, mm/ss은 00~60 이런식의 범위를 넘으면 발생함. 구글링을 한 결과 해결 방법은 연산된 Date/Time의 값을 String으로 변환하여 Type에 얽힌 error가 발생하..
최근 몇 년 동안 REST(Representational State Transfer)가 전통적인 SOAP 기반의 웹 서비스에 대한 인기 있는 정보 중심의 대안으로 떠오르고 있음. SOAP는 전형적인 동작과 프로세싱에 집중하고 있으며, REST의 관심은 데이터 처리에 있음. REST의 기본 개념 REST에 접근할 때 자주하는 실수 중의 하나는 REST를 'URL을 이용하는 웹 서비스'라고 생각하는 것. 즉, REST를 SOAP과 같이 또 다른 RPC(Remote Procedure Call) 메커니즘으로 여긴다. → 사실상 거의 연관이 없음. But, REST는 SOAP의 수많은 XML 네임스페이스를 이용하지 않고 평범한 HTTP URL을 통해 호출됨. RPC - 서비스 지향적이고 액션과 동사에 초점을 맞춤..
11.1 스프링과 하이버네이트 통합 지연 로딩(lazy loading) : 우리가 필요로 하는 실제 데이터만 불러올 수 있음. 필요한 부분만 가져오는 것. 조기 인출(eager fetching) : 지연 로딩의 반대개념. 한 번의 쿼리로 전체 객체 구조를 가져올 수 있음. 캐스케이딩(cascading) : 테이블 변경 시 다른 테이블도 변경되어야 하는 경우가 있을 때 작동하는 것. → 객체 관계 매핑 (ORM: Object Relational Mapping) : 많은 양의 코드를 줄이고 개발 시간을 단축함. 스프링은 다수의 ORM 프레임 워크를 지원함 (Hibernate, iBATIS, Apache OJB, JDO, TopLink, JPA 등) 하이버네이트는 오픈 소스 퍼시스턴스 프레임워크 (+ cahc..

Web 기반 Appl.의 경우 state 관리, workflow, 검증은 매우 중요하게 고려되어야 할 사항이지만, HTTP protocol의 stateless 성격을 감안했을 때 쉽게 해결되지 않음. 스프링 Web FWK는 이런 문제들을 처리하는 데 도움을 줄 수 있도록 디자인되어있음. MVC 패턴을 기반으로 스프링 MVC는 스프링 FWK 자체와 긴밀한 연결없이 유연한 Web 기반 Appl.을 만드는 데 도움을 줌. Request, Dispatcher Servlet, Handler Mapping, Controller, View Resolver 등 DispatcherServlet 요청을 스프링 MVC Controller에 전달해 주는 것. (Controller는..
횡단 관심사(Cross-cutting concerns) 소프트웨어에서 로깅, 보안 트랜잭션 관리 같은 기능은 대부분의 애플리케이션에 공통적으로 나타나는 기능 DI - Appl. 객체 간 결합도를 낮추기 위함 AOP - 횡단 관심사와 이에 영향 받는 객체 간 결합도를 낮추기 위함 AOP (Aspect Object Programming) 기존 : 상속(inheritance), 위임(delegation)을 사용하여 공통 기능을 재사용함 → But, 상속은 객체의 정적 구조에 의존하므로 복잡하고 깨지기 쉬운 구조가 되기 십상 → 위임은 대상 객체에 대한 복잡한 호출로 인해 번거로움. 현재 : 횡단 관심사를 aspect라는 특별한 클래스로 모듈화함 첫 번째 장점 : 전체 코드 기반에 흩어져 있는 관심 사항이 하나..
스프링을 사용하는 Appl.에서는 각 객체가 자신의 일을 하기 위해 필요한 다른 객체를 직접 찾거나 생성할 필요가 없음. Container가 협업할 객체에 대한 reference를 주기 때문. 애플리케이션 객체 간의 이러한 연관관계 형성 작업이 바로 Dependecy Injection 개념의 핵심이며 보통 이를 wiring(와이어링)이라고 함. Wiring mechanism XML에서의 명시적 설정 Java에서의 명시적 설정 내재되어 있는 빈을 찾아 자동으로 wiring하기 자동으로 빈 와이어링하기 스프링은 두 가지 방법으로 auto wiring을 수행함. Component Scanning - Appl. context에서 생성되는 빈을 자동으로 발견함 Auto Wiring - 자동으로 빈 의존성을 충족시..
스프링 프레임워크 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크 Spring, 스프링 J2EE 애플리케이션 개발을 위한 책의 예제를 작성하면서 사용했던 프레임워크들을 발전시켜 지금에 이름. 자바 엔터프라이즈 개발을 편하게 해 주는 오픈 소스 경량급 애플리케이션 프레임 워크 “JEE 애플리케이션 개발을 더 쉽게 만들겠다.”는 대단히 명확한 목적으로 만들어짐 자바 복잡도 간소화를 지원하기 위한 스프링의 네 가지 주요 전략 POJO를 이용한 lightweight하고, non-invasive한 개발 Non-invasive : 바탕이 되는 기술을 사용하는 클래스, 인터페이스, API 등을 코드에 직접 나타내지 않는 방법. 복잡함을 분리할 수 있음. DI와 Interface Orientation을 통한 lo..

https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html JPA(Java Persistent API) Java ORM 기술에 대한 API 표준 명세 ORM을 사용하기 위한 Interface를 모아둔 것. To use JPA → Hibernate, EclipseLink, DataNucleus 같은 ORM FWK를 사용해야 함. ORM(Object Relational Mapping) Object와 DB Table이 Mapping을 이루는 것. → Object가 Table이 되도록. Query문이 아닌 직관적인 코드(Method)로 데이터를 조작할 수 있음. → query 작성 시간 ↓ → 생산성 ↑ But, 복잡한 qu..
BeanFactory - The BeanFactory interface provides an advanced configuration mechanism capable of managing any type of object. - The BeanFactory provides the configuration framework and basic functionality. ApplicationContext - ApplicationContext is a sub-interface of BeanFactory. It adds easier integration with Spring’s AOP features; message resource handling (for use in internationalization), ev..