프로젝트를 진행하다보면 톰켓 shutdown을 실행시켜서 당연히 종료되었다고 생각했지만 제대로 종료되지않고 톰캣 프로세스가 남아있는 현상이 있습니다.

이는 배치 스케쥴링과, JDBC Driver가 종료되지 않을때 나오는 현상인데, shutdown을 시킬때는 배치 스케쥴링과, JDBC Driver를 별도로 강제종료를 시켜줘야 합니다.

 

방법은 다음과 같습니다.

 

 
1. ShutdownHook을 생성
 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
 
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
 
public class ShutdownHook implements ServletContextListener {
    @Override
    public void contextDestroyed(ServletContextEvent arg0)
    {
        try
        {
       
            // 스케쥴러 Bean name을 모를때 주석을 풀어 Bean Name을 찾을 수 있다.
//            String[] temp = getBzRConfigHelper().getFactory().getBeanDefinitionNames();
//            if(temp!=null) {
//                for (int i = 0; i < temp.length; i++) {
//                    this.logHandler("beans : " + temp[i], null);
//                }
//            }    
            // Get a reference to the Scheduler and shut it down
            try {
                Scheduler scheduler = (Scheduler) getBzRConfigHelper().getFactory().getBean("org.springframework.scheduling.quartz.SchedulerFactoryBean");
                scheduler.shutdown(true);        
            }catch(NoSuchBeanDefinitionException e) {
                this.logHandler(e.getMessage(), e);
            }
    
            Enumeration<Driver> drivers = DriverManager.getDrivers();
            while (drivers.hasMoreElements()) {
                Driver driver = drivers.nextElement();
                try {
                    DriverManager.deregisterDriver(driver);
                    this.logHandler(String.format("deregistering jdbc driver: %s", driver), null);
                } catch (SQLException e) {
                    this.logHandler(String.format("deregistering jdbc driver: %s", driver), e);
                }
            }
            Thread.sleep(1000);
            try {
                ThreadGroup threadGroup = Thread.currentThread().getThreadGroup(); 
                threadGroup.interrupt();    
            }catch(Exception e) {
                this.logHandler(e.getMessage(), e);
            }
            this.logHandler("--End contextDestroyed --" + new Date(), null);
            // Sleep for a bit so that we don't get any errors
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
 
    @Override
    public void contextInitialized(ServletContextEvent arg0)
    {
    }
        
    public boolean isNullOrEmpty(String str) {
        return str == null || StringUtils.isEmpty(str);
    }
 
    public boolean isNullOrEmptyOrWhite(String str) {
        return str == null || StringUtils.isEmpty(str.trim());
    }
    
}
http://colorscripter.com/info#e" target="_blank" style="color: rgb(229, 229, 229);">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="color: white;">cs
 
2. Web.xml 리스너를 생성한 ShutdownHook로 변경
1
2
3
4
5
....
    <listener>
        <listener-class>~.ShutdownHook</listener-class>
    </listener>
http://colorscripter.com/info#e" target="_blank" style="color: rgb(229, 229, 229);">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="color: white;">cs
 
3. 제대로 톰캣 Process가 종료되는지 확인.
==============================================================================================
주의할점은 각 프로젝트마다 Batch Bean 클래스가 다를 수 있으므로 알맞게 수정해서 사용해야합니다.
by 아카마메 2019. 3. 29. 16:57

Many text editors have advanced find (and replace) features. When I’m programming, I like to use an editor with regular expression search and replace. This feature is allows one to find text based on complex patterns rather than based just on literals. Upon occasion I want to examine each of the comments in my source code and either edit them or remove them. I found that it was difficult to write a regular expression that would find C style comments (the comments that start with /* and end with */) because my text editor does not implement the “non-greedy matching” feature of regular expressions.

First Try

When first attempting this problem, most people consider the regular expression:

/\*.*\*/

This seems the natural way to do it. /\* finds the start of the comment (note that the literal * needs to be escaped because * has a special meaning in regular expressions), .* finds any number of any character, and \*/ finds the end of the expression.

The first problem with this approach is that .* does not match new lines.

/* First comment 
 first comment—line two*/
/* Second comment */

Second Try

This can be overcome easily by replacing the . with [^] (in some regular expression packages) or more generally with (.|[\r\n]):

/\*(.|[\r\n])*\*/

This reveals a second, more serious, problem—the expression matches too much. Regular expressions are greedy, they take in as much as they can. Consider the case in which your file has two comments. This regular expression will match them both along with anything in between:

start_code();
/* First comment */
more_code(); 
/* Second comment */
end_code();

Third Try

To fix this, the regular expression must accept less. We cannot accept just any character with a ., we need to limit the types of characters that can be in our expressions:

/\*([^*]|[\r\n])*\*/

This simplistic approach doesn’t accept any comments with a * in them.

/*
 * Common multi-line comment style.
 */
/* Second comment */

Fourth Try

This is where it gets tricky. How do we accept a * without accepting the * that is part of the end comment? The solution is to still accept any character that is not *, but also accept a * and anything that follows it provided that it isn’t followed by a /:

/\*([^*]|[\r\n]|(\*([^/]|[\r\n])))*\*/

This works better but again accepts too much in some cases. It will accept any even number of *. It might even accept the * that is supposed to end the comment.

start_code();
/****
 * Common multi-line comment style.
 ****/
more_code(); 
/*
 * Another common multi-line comment style.
 */
end_code();

Fifth Try

What we tried before will work if we accept any number of * followed by anything other than a * or a /:

/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*/

Now the regular expression does not accept enough again. Its working better than ever, but it still leaves one case. It does not accept comments that end in multiple *.

/****
 * Common multi-line comment style.
 ****/
/****
 * Another common multi-line comment style.
 */

Solution

Now we just need to modify the comment end to allow any number of *:

/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/

We now have a regular expression that we can paste into text editors that support regular expressions. Finding our comments is a matter of pressing the find button. You might be able to simplify this expression somewhat for your particular editor. For example, in some regular expression implementations, [^] assumes the [\r\n] and all the [\r\n]can be removed from the expression.

This is easy to augment so that it will also find // style comments:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)

ToolExpression and UsageNotes
nedit(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
Ctrl+F to find, put in expression, check the Regular Expression check box.
[^] does not include new line
grep(/\*([^*]|(\*+[^*/]))*\*+/)|(//.*)
grep -E “(/\*([^*]|(\*+[^*/]))*\*+/)|(//.*)” <files>
Does not support multi-line comments, will print out each line that completely contains a comment.
perl/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/
perl -e “$/=undef;print<>=~/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/g;” < <file>
Prints out all the comments run together. The (?: notation must be used for non-capturing parenthesis. Each / must be escaped because it delimits the expression. $/=undef; is used so that the file is not matched line by line like grep.
Java"(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)"
System.out.println(sourcecode.replaceAll(“(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)”,””));
Prints out the contents of the string sourcecode with the comments removed. The (?: notation must be used for non-capturing parenthesis. Each \ must be escaped in a Java String.

An Easier Method

 

Non-greedy Matching

Most regular expression packages support non-greedy matching. This means that the pattern will only be matched if there is no other choice. We can modify our second try to use the non-greedy matcher *? instead of the greedy matcher *. With this new tool, the middle of our comment will only match if it doesn’t match the end:

/\*(.|[\r\n])*?\*/

ToolExpression and UsageNotes
nedit/\*(.|[\r\n])*?\*/
Ctrl+F to find, put in expression, check the Regular Expression check box.
[^] does not include new line
grep/\*.*?\*/
grep -E ‘/\*.*?\*/’ <file>
Does not support multi-line comments, will print out each line that completely contains a comment.
perl/\*(?:.|[\r\n])*?\*/
perl -0777ne ‘print m!/\*(?:.|[\r\n])*?\*/!g;’ <file>
Prints out all the comments run together. The (?: notation must be used for non-capturing parenthesis.
/ does not have to be escaped because ! delimits the expression.
-0777 is used to enable slurp mode and -n enables automatic reading.
Java"/\\*(?:.|[\\n\\r])*?\\*/"
System.out.println(sourcecode.replaceAll(“/\\*(?:.|[\\n\\r])*?\\*/”,””));
Prints out the contents of the string sourcecode with the comments removed. The (?: notation must be used for non-capturing parenthesis. Each \ must be escaped in a Java String.

Caveats

 

Comments Inside Other Elements

Although our regular expression describes c-style comments very well, there are still problems when something
appears to be a comment but is actually part of a larger element.

someString = "An example comment: /* example */";

// The comment around this code has been commented out.
// /*
some_code();
// */

The solution to this is to write regular expressions that describe each of the possible larger elements, find these as well, decide what type of element each is, and discard the ones that are not comments. There are tools called lexers or tokenizers that can help with this task. A lexer accepts regular expressions as input, scans a stream, picks out tokens that match the regular expressions, and classifies the token based on which expression it matched. The greedy property of regular expressions is used to ensure the longest match. Although writing a full lexer for C is beyond the scope of this document, those interested should look at lexer generators such as Flex and JFlex.


출처 : Finding Comments in Source Code Using Regular Expressions

by 아카마메 2019. 3. 12. 15:20

제가 했던 한프로젝트에서는 메인 프레임이 존재하며, Iframe에 저희 회사 제품을 제공하는 프로젝트인데, 

IE에서 SSO로그인 처리 후 세션이 유지되지않는 현상이 발생되었습니다.
이는 P3P (Platform for Personal Preferences) 규약을 도입했기 때문이라고 합니다.
P3P (Platform for Personal Preferences) 규약은 W3C ( World wide Consortium )에서 만들어 졌습니다.
(마이크로 소프트 p3p 정책 http://msdn.microsoft.com/library/default.asp?url=/workshop/security/privacy/overview/createprivacypolicy.asp)
(W3C - p3p 규약 http://www.w3.org/TR/2002/REC-P3P-20020416/ )
그래서 다른 주소지로 연결되는 프레임구조로(특히 포워딩 고정 연결시) 웹페이지가 열리게 되면, 쿠키가 적용되지 않게 됩니다.

이 문제를 해결하려면 3가지 방안이 있습니다.

1. IE 옵션 변경
2. 웹서버에 p3p 규약을 허용하는 HTTP 헤더 추가하는 방법
3. 웹페이지에서 p3p 규약을 허용하는 HTTP 헤더를 추가하는 방법

* 첫 번째 방법은 다음과 같습니다. 

(IE 11기준) 도구-인터넷옵션-개인정보-고급-자동으로 쿠키 처리 안 함-항상 세션에 쿠키허용 체크
이 방법은 사용자가 각자 설정을 해줘야하는 방법으로 추천하지않습니다.

* 두 번째 방법은 다음과 같습니다.

conf/httpd.conf 에 다음과 같이 추가한다.
<IfModule mod_headers.c> 
Header add P3P "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\"" 
Header set P3P "CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\"" 
</IfModule> 

두 번째 방법도 대규모 프로젝트는 TA(Technical Architecture)에게 의존적이므로 추천하지않습니다.

* 세 번째 방법은 다음과 같습니다.

세션필터에 세션이 없을때만 아래 헤더를 추가합니다.
response.setHeader("P3P","CP='CAO PSA CONi OTR OUR DEM ONL'");

세 번째 방법은 개발자가 직접 컨트롤 가능하므로 추천드리는 방법입니다.

이상입니다. 해당 문제가 발생했을 때 도움이 되시기바랍니다.


by 아카마메 2018. 3. 9. 16:38

일반적으로 JAVA에서 ClientIP를 가져오려면 request.getRemoteAddr();를 사용하게 되는데,


웹로직 환경에서는 IP를 가져올 수 없었다, WebServer, WAS, L4, proxy 종류에 상관없이 client IP 를 잘 가져오기를 바란다면 다음과 같은 순서로 IP 를 얻어내야 한다.

 String ip = request.getHeader("X-Forwarded-For");
 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
     ip = request.getHeader("Proxy-Client-IP"); 
 } 
 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
     ip = request.getHeader("WL-Proxy-Client-IP"); 
 } 
 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
     ip = request.getHeader("HTTP_CLIENT_IP"); 
 } 
 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
     ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
 } 
 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
     ip = request.getRemoteAddr(); 
 }

이상입니다.


by 아카마메 2018. 3. 9. 16:32

프로젝트를 진행할때 외부 스크립트 (구글, 다음, 네이버 등..)의 자바 스크립트를 사용 할 경우가 있습니다.


예를들어 다음 주소 API를 사용할때, 스크립트를 그대로 복사해서 사용하게되면 동작을 하지 않으므로, 외부에서 링크를 거는 수 밖에 없습니다.


하지만, 인터넷이 느린 환경이거나 인터넷이 전혀 안돼는 경우에는 해당 스크립트를 import하는 시도를 타임아웃 시간 직전까지 계속 요청하므로 페이지 로딩 속도가 현저하게 느려집니다.


따라서 페이지가 로딩 된 후에 스크립트를 로딩하는 방법을 사용하게되면 적어도 페이지가 로딩된 후에 그 스크립트를 임포트하려 하므로 사용자들의 사용성에 큰 도움이 될 것입니다.


아래 방법으로 적용하였습니다.

 

 - 스크립트 내용을 살펴보자면 아래와 같습니다.


function loadJavascript(id, url, callback, charset) { // 스크립트ID, 스크립트 Src, 호출 후 Callback함수, 캐릭터 셋

    var head= document.getElementsByTagName('head')[0];

    

    if (head.childNodes.length > 0) {  // Head에 호출 ID Import 여부 판단

        for(var i = 0; i < head.childNodes.length; i++ ){

        if(typeof id != 'undefined' && id != '' && head.childNodes[i].id == id){

 // ID 발견하면 CallBack함수만을 호출

        if(callback != '' && callback != null && typeof callback != 'undefined') callback();

        return;

        }

        }

}

    

    var script= document.createElement('script');

    script.type= 'text/javascript';

    if (charset != null) {

        script.charset = "euc-kr";

    }

    var loaded = false;

    script.onreadystatechange= function () {

        if (this.readyState == 'loaded' || this.readyState == 'complete') {

            if (loaded) {

                return;

            }

            loaded = true;

            if(callback != '' && callback != null && typeof callback != 'undefined') callback();            

        }

    }

    script.onload = function () {

    if(callback != '' && callback != null && typeof callback != 'undefined') callback();

    }

    script.id = id;

    script.src = url;

    head.appendChild(script);

    if(callback != '' && callback != null && typeof callback != 'undefined') callback();

}


사용법 

$(document).ready(function () { // 페이지 로딩 후 동작

    loadJavascript('고유ID', '스크립트 SRC', 'CallBack 함수', '인코딩 언어'); // 호출 

});


이상입니다. 필요하실때 도움이 되시기 바랍니다.



by 아카마메 2018. 3. 9. 16:30

1.IE 10 이하 브라우저에서 window.open() 인수 오류 사례


IE 10의 하위 브라우저는 window.open('url','title','option');

에서 title부분에 '-'문자열이 들어가게 되면 인수 오류가 발생해서 팝업이 표시되지않습니다.


2.IE 10 이하 브라우저에서 min-width속성 문제


어떤 부모 요소에 width 스타일을 주지 않았을 때, 자식의 width에 영향을 받아 자동으로 늘어나는 것이 정상입니다.

하지만 IE9에서는 자식요소에 min-width속성을 주게 되면 자동으로 늘어나지 않는 현상이 발생합니다.



by 아카마메 2018. 3. 9. 16:23

SSL 인증서를 서로 설치하기전 환경에서는 이상없이 호출되던 API가 

java.net.protocolexception unsupported protocol https~ 와같은 에러를 내며 동작하지 않게되었습니다.

알아보니 웹로직만의 SSL 프로토콜이 있다고 합니다.  호출하던 API는 톰캣환경이었으므로 통신에 실패했는데, 

이를 다음과 같이 해결했습니다.

Weblogic 기동 파일에 실행옵션에 -DUseSunHttpHandler=true를 추가함으로써 해결하게되었습니다.


'Was > WebLogic' 카테고리의 다른 글

WebLogic 환경에서 IP를 가져올 수 없을때 해결법  (0) 2018.03.09
by 아카마메 2018. 3. 9. 16:20


JAVA 기본 정책으로 AES128 암호화 방식까지 사용가능하기 때문에,
AES256을 사용하면 아래와 같은 에러가 발생합니다.
java.security.InvalidKeyException: Illegal key size
해결방법은 $JAVA_HOME/jre/lib/security 에 아래의 local_policy.jar US_export_policy.jar 두 파일을 덮어 쓰기 하시면 됩니다.

각 JDK 버전에 맞게 다운로드 받으셔서 덮어 씌워 주셔야 합니다.





by 아카마메 2018. 3. 9. 16:11

build.xml 실행시에 Specified VM install not found: type Standard VM, 에러가 발생하는 경우의 해결법

#{이클립스워크스페이스}/.metadata/.plugins/org.eclipse.debug.core/.launches/프로젝트이름 build.xml.launch file”

아무래도 이클립스가 Crash 했을경우 처리되지 않은 파일들이 남아있어서 발생하는것 같다.

출처 : http://jo.centis1504.net/?p=477

by 아카마메 2018. 3. 9. 16:06

Toby Yun님의 블로그에서 발췌한 질문 내용이다.

답안이 작성이 안되있으므로 차례대로 작성해나갈 생각이다.

사실 모르는게 대부분이라.. 이 기회에 많이 알아가는 것 같다. Toby Yun님 정말 감사드립니다.

# 마크업 개발 레벨 테스트

레벨테스트의 목적은 현재 파악하고 있는 수준을 측정함에 있습니다.
자료를 찾아서 답을 작성하지 마시고, 편안한 마음으로 아는 만큼만 적어주세요.

모든 답변은 2줄이 넘지 않을 정도의 분량으로 간결하게 작성해주세요.

## HTML

1. Doctype을 사용하지 않을 때는 무슨 일이 발생할까요?

DTD는 브라우저의 렌더링 모드를 지정해주는 태그로, DOCTYPE 태그를 무시하고 선언하지 않아도 되지만,

XHTML과 같은 정확하게 XML 구문으로 작성되어야 하는 HTML 문서에서는 반드시 선언을 해야한다.

그렇지 않으면 브라우저가 XHTML로 문서를 인식하지 않으므로 XML 구문에 어긋나는 점이 있더라도

브라우저는 무시할 수 있다.

2. 웹표준에 맞게 작업할 때 b, i 태그 대신 적합한 태그는 각각 무엇일까요?

<b> -> <strong>

b와 Strong 태그 모두 시각적으로 글씨를 굵게 만드는 태그이지만, 

strong으로 둘러싸인 단어는 중요단어로 검색엔진의 키워드 수집에 반영되므로 

강조를 위해서는 strong을 쓰는 것이 좋다.

<i> -> <em>

i태그와 em 태그 모두 글씨를 시각적으로 기울어진 모습으로 만들어주지만,

em태그 역시 검색엔진 키워드 수집에 반영되므로 강조를 위해선 em을 쓰는 것이 좋다.

요컨데 시맨틱 웹을 위해서 b,i를 지양하고 strong, em 태그를 사용하는 것을 추천한다.

3. block 요소와 inline 요소에 해당하는 태그들을 각각 5개씩 적어보세요.

block 요소는 항상 새로운 라인으로 시작하고 전체 폭넓이를 이용하는 요소이다.

div, h1, p, form, ul, li, dl...

inline 요소는 새로운 라인에서 시작하지 않고, 필요한 만큼의 폭을 사용하는 요소이다.

span, a, em, img, strong...

4. blockquote 태그는 어떤 용도로 사용해야 할까요?

인용구문을 작성 할 때 사용하는 태그이다.

5. 인라인 스타일(style=“property:value”)을 가급적 사용하지 말아야 할 이유는 무엇일까요?

인라인 스타일을 사용하면 CSS를 무시하기 때문에 수정 하고자할 때 소스를 수정해야 하는 문제가 발생 할 수있으며 표현과 구조의 분리 측면에서도 좋지 않다. Html은 구조만을 나타내야만 좋다.

6. myPhoto.jpg 파일을 img 태그로 작성해보세요.

<img src="img/myPhoto.jpg" alt="myPhoto">

7. HTML에서 id 속성을 사용하는 이유와 주의 할 점은 무엇일까요?

ID 속성은 해당 요소의 고유속성으로 요소를 조작,제어할 때 사용하며,

ID는 CSS 선택자에서 class 보다 우선순위에 있으므로 신중히 사용해야 한다.

8. ‘TopArea'라는 클래스명이 좋지 않은 이름이라면 그 이유는 무엇일까요?

Css문법에서  2개 이상의 단어가 사용된 속성에 -(hyphen) syntax를 사용하는데 

이를 따르지 않았으며, Top이라는 방향성은 무엇을 기준으로 Top인지도 명확하지 않으므로

방향은 쓰지 않는 것이 좋다 Navigation영역이라면 navigation-area 쯤이 좋지않을까 생각한다.

9. 'blue-box'라는 클래스명이 좋지 않은 이름이라면 그 이유는 무엇일까요?

blue라는 색상은 언제든 바뀔 수 있고, 색을 변경 해야 할 때 class 명도 바뀌어야 한다.

이 요소가 갖고있는 역할을 작명하는 것이 추가 작업을 막는 방법이다.

10. HTML5에 새롭게 추가된 aside 태그는 어떤 용도로 사용해야 할까요?

주요한 내용이 아닌 부수적인 내용을 담을 때 사용한다. 

11. input 태그와 항상 함께 사용해야 할 태그는 무엇일까요?

from, label

12. 모바일 웹 또는 반응형웹디자인 프로젝트에서 각 기기에 적합한 화면을 보여주기 위해 필요한 meta 태그는 무엇일까요?

<meta name="viewport" content="width=device-width, user-scalable=no">

## CSS

1. 화면 상에는 보이지 않으나, 스크린 리더에서 읽혀야 하는 요소에 주어야 할 스타일링을 작성해보세요.
2. float 속성을 가진 자식을 품은 부모요소는 높이 값이 0이 되는 때가 있습니다. 이 현상을 해소하는법(clearing)을 알고 있나요?
3. border-box와 content-box의 차이점은 무엇일까요?
4. position: relative는 어떤 경우에 사용 하나요?
5. CSS Reset은 무엇이며 왜 사용할까요?
6. Sass, less, Stylus와 같은 CSS 프리프로세서를 사용해본적이 있나요?
7. id, class, inline style, !important를 우선순위 순으로 나열해보세요.
8. CSS에서 상속이 되는 속성을 2개만 꼽아보세요.
9. Sprite image 기법을 사용하는 이유는 무엇일까요?
10. Sprite image 기법을 사용하는데 필요한 CSS 속성들을 꼽아보세요.
11. 점진적 향상(Progressive Enhancement)의 뜻을 설명 할 수 있나요?
12. 웹폰트를 적용하기 위해서는 어떤 확장자의 폰트 파일들이 필요할까요?
13. 개발사 접두어(vendor prefix)를 꼭 사용해야 할 CSS 속성(property)를 2개만 꼽아보세요.
14. 반응형웹디자인의 3가지 요소를 꼽아보세요.
15. 모바일기기를 대응할 때 기준으로 삼는 해상도 사이즈는 몇이며 그 이유는 무엇인가요?
16. :first-child와 :last-child가 지원하는 IE의 버전명을 적어보세요.
17. 포토샵(또는 다른 그래픽툴)에서 이미지를 자를 때 어떤 기능을 사용하나요? (메뉴명, 단축키 등)
18. jpg, gif, png의 차이점을 설명해보세요.
19. 가상컨텐츠(:before, :after)는 어떤 용도로 사용할까요?
20. 블럭요소 안의 어떤 자식 요소를 정중앙에 놓는 방법을 알고 있습니까?


by 아카마메 2015. 10. 2. 16:07
| 1 |