16.04 에 systemctl 명령어가 없다면 systemd를 설치한다.

$ sudo apt install systemd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libcryptsetup4 libsystemd-journal0
Suggested packages:
systemd-ui
The following NEW packages will be installed:
libcryptsetup4 libsystemd-journal0 systemd
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,556 kB of archives.
After this operation, 9,452 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://kr.archive.ubuntu.com/ubuntu/ trusty-updates/main libsystemd-journal0 amd64 204-5ubuntu20.24 [51.0 kB]
Get:2 http://kr.archive.ubuntu.com/ubuntu/ trusty/main libcryptsetup4 amd64 2:1.6.1-1ubuntu1 [77.0 kB]
Get:3 http://kr.archive.ubuntu.com/ubuntu/ trusty-updates/main systemd amd64 204-5ubuntu20.24 [1,427 kB]
Fetched 1,556 kB in 2s (762 kB/s)
Selecting previously unselected package libsystemd-journal0:amd64.
(Reading database ... 96241 files and directories currently installed.)
Preparing to unpack .../libsystemd-journal0_204-5ubuntu20.24_amd64.deb ...
Unpacking libsystemd-journal0:amd64 (204-5ubuntu20.24) ...
Selecting previously unselected package libcryptsetup4.
Preparing to unpack .../libcryptsetup4_2%3a1.6.1-1ubuntu1_amd64.deb ...
Unpacking libcryptsetup4 (2:1.6.1-1ubuntu1) ...
Selecting previously unselected package systemd.
Preparing to unpack .../systemd_204-5ubuntu20.24_amd64.deb ...
Unpacking systemd (204-5ubuntu20.24) ...
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up libsystemd-journal0:amd64 (204-5ubuntu20.24) ...
Setting up libcryptsetup4 (2:1.6.1-1ubuntu1) ...
Setting up systemd (204-5ubuntu20.24) ...
Initializing machine ID from D-Bus machine ID.
systemd start/running, process 5375
Processing triggers for libc-bin (2.19-0ubuntu6.13) ...
Processing triggers for ureadahead (0.100.0-16) ...


Spring은 사용하려는 프로파일을 정의하여 상황에 따라 컴포넌트에 대한 등록 및 제외를 결정할 수 있다.

@Profile({"dev", "!kr"})

이라고 프로파일을 정의하면 조건식은 dev or !kr 이 되어 dev 혹은 kr 에 대해서 선언되어 있지 않으면 반드시 실행되는 상황이 발생한다.

이런 상황을 피할 수 있는 방법으로 Spring 4.0에서 추가된 @@Conditional 을 사용하는 방법이 있다. 이와 관련한 질문은 How to conditionally declare Bean when multiple profiles are not active? 를 살펴보면 고민하고 있는 유사한 내용과 답변을 볼 수 있다.

간단한 해결책은 Condition을 구현하는 것이다. 다음과 같이 간단하게 dev and !kr을 만족하는 조건식을 작성해보자.

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class PrdAndIgnoreKrProfileCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().acceptsProfiles("prd") && !context.getEnvironment().acceptsProfiles("kr");
}
}

위의 클래스를 사용하여

@Profile({"dev", "!kr"})
//을 대신하여
@Conditional(PrdAndIgnoreKrProfileCondition.class)
// 으로 정의하면 dev and !kr 조건식이 적용가능해진다.


규모가 작은 회사에 있다보면
자주 경영진이 택하는 방향과 내가 보는 방향의 차이를 느끼게 된다.

서로 재미있는 일을 해보자며 모였지만,
1년이 지날 즈음해서는
재미는 없고 차갑게 그들과 나의 차이를 살피기 시작했다.

눈에 띌만한 성과를 어느정도 얻은 후 그들은 더욱 많은 것을 바란다. 그런데 그걸 얻기 위해 밑에서는 많은 것을 포기하고 해야한다. 저녁시간을, 주말을, 체력으로 일을 해낸다.
자신들이 해야할 일이었으니까.

그리고 그것을 당연하다는 듯이 이야기하고, 그들이 원하는 일정에 맞춰주길 바란다.

그런 사이에 점점 괴리감은 점점 커져가고 거리를 두는 준비를 하고 있다.

의욕없는 비관론자 코스프레로 서비스 일정에 대해 보수적인 입장을 취하고 있다.

뭐... 내 말이 먹히지 않을 걸 알지만 그냥 발악해보는 중.

'logbook' 카테고리의 다른 글

[소개] 협업도구 Microsoft Team Services  (0) 2017.11.08
[월급쟁이개발자] 인수인계  (0) 2017.11.05
[book]바딘Vaadin & 회계천재...  (0) 2017.06.12
5번째 봄이 끝났다.  (0) 2017.04.23
가볍게 가자  (0) 2016.08.18

회사에서 개발해야 할 백오피스 시스템을 바딘 프레임워크로 만들어볼까 하던 중에 책이 나와서 지름.
회계는... 요즘 돈관리가 잘 안되어서 체계적으고 해보려고...

'logbook' 카테고리의 다른 글

[월급쟁이개발자] 인수인계  (0) 2017.11.05
[daily] 괴리감  (1) 2017.07.11
5번째 봄이 끝났다.  (0) 2017.04.23
가볍게 가자  (0) 2016.08.18
커뮤니케이션 비용을 줄이려면...  (0) 2016.08.10

가끔, 내 생각과는 다르게 IDE에서 멋대로 코드를 포맷팅하는 경우가 있다.

그런 때에 사용할 수 있는 기능이 있다.

인텔레제이 2017.x 기준 [Preference > Editor > Code Style] 에서 'Formatter Control'을 체크하면 된다.

이렇게 작성한 코드도

@Test
public void formatterOff() throws Exception {
List<String> arrays = new ArrayList<>(); arrays.add("Test"); arrays.add("Formatter");
}

포맷팅을 하면

@Test
public void formatterOff() throws Exception {
List<String> arrays = new ArrayList<>();
arrays.add("Test");
arrays.add("Formatter");
}

처럼 되지만 //@formatter:off~//@formatter:on 을 이용하면

@Test
public void formatterOff() throws Exception {
//@formatter:off
List<String> arrays1 = new ArrayList<>(); arrays1.add("Test"); arrays1.add("Formatter");
//@formatter:on

List<String> arrays2 = new ArrayList<>(); arrays2.add("Test"); arrays2.add("Formatter");
}

이런 코드가

@Test
public void formatterOff() throws Exception {
//@formatter:off
List<String> arrays1 = new ArrayList<>(); arrays1.add("Test"); arrays1.add("Formatter");
//@formatter:on

List<String> arrays2 = new ArrayList<>();
arrays2.add("Test");
arrays2.add("Formatter");
}

이렇게 변경된다.


메서드 체이닝을 이용해서 작성하는 경우에 유용하다.

+ Recent posts